0

複数行のテキストを含むテキスト ファイルがあります。正確に 1 行のテキストには、次のシーケンスがあります。

XMLcpLINK: ########

# のシーケンスは、任意の文字または記号にすることができます。

XMLcpLINK:私がしなければならないことは、その後のシーケンスを見つけて変数に保存するまで、各行を読むことです。これを行うのに十分な UNIX リファレンスを教えてくれる人はいますか?

4

6 に答える 6

3

何かのようなもの

my_var=$(sed -n 's/XMLcpLINK: //p' file.txt)

するべきです。

ここにまともなsed参照があります。

またはあなたが持っている場合GNU grep

my_var=$(grep -oP '(?<=XMLcpLINK: ).*' file.txt)

追加-m 1することはajozwikgrepが持っている良いアイデアです。少しスピードアップするはずです。

于 2013-03-12T21:47:06.000 に答える
1

POSIX sh

外部コマンドやサブシェルはありません

while IFS=': ' read name value; do
    case "$name" in
        XMLcpLINK) result="$value"
    esac
done < input_file
echo "$result"
于 2013-03-12T21:57:46.507 に答える
1

すでにいくつかの良い回答を得ていますが、改善の余地があります。

次のすべての値をXMLcpLINK出力してから終了します。

awk:

$ awk '/^XMLcpLINK: /{print $2;exit}' file
########

grep:

$ grep -Pom1 '(?<=^XMLcpLINK: ).*' file
########

sed:

$ sed -n '/^XMLcpLINK: /{s/XMLcpLINK: //p;q}' file
########

お気に入りを選択し、コマンド置換を使用して結果を変数に格納します。

$ var=$(awk '/^XMLcpLINK: /{print $2;exit}' file)

$ echo $var
########
于 2013-03-13T00:33:40.710 に答える
1

grep -m 1 'XMLcpLINK' file.txt | awk '{ print $2}'- 最初の出現のみ

grep 'XMLcpLINK' file.txt | awk '{ print $2}'- すべて一致

于 2013-03-12T21:51:01.790 に答える
0
#!/bin/bash
VAR=$(grep "XMLcpLINK: " test.txt | awk '{ print $2 }')
echo $VAR

test.txt は分析するファイルです。

于 2013-03-12T21:48:30.707 に答える
0

これを実現するには、次の 2 つの方法があります。

bash とダッシュを使用すると、「myfile.txt」という名前のテストファイルを使用して、次のように動作するはずです。

while read i; do if [ "$i" != "${i#XMLcpLink: }" ]; then variable="${i#XMLcpLink: }"; break; fi; done <myfile.txt ; echo variable == "${variable}"

「${var#something}」の説明については、bash man ページの「パラメーター拡張」セクションを参照してください。

または、少し短く、おそらく高速です (一致した後にファイルに一致しない行が多数ある場合を除きます)。変数の前にスペースを付けても問題ない場合は、外部の grep および cut ユーティリティを使用します。

variable="`grep -e '^XMLcpLink: ' myfile|cut -d':' -f2-`" ; echo variable == "${variable}"

おそらくもっと多くの方法があり、おそらくそれを行うためのより良い方法があります。

于 2013-03-12T22:06:59.320 に答える