私はそれを使用しています
grep 'name=>' log.txt | cut -d\ -f3
私は次のような結果を得ます。
name=>"Faya-Largeau",
name=>"Paris",
name=>"Madrid",
name は変数の出力です。 (私はこのような都市の長いリストを持っています)
「Faya-Largeau」、「Paris」、または「Madrid」のみをインポートしたいので、名前=>と後の括弧の間にある都市を除外する必要があります。
どうすればいいですか?
事前にありがとう
答え1
このユーティリティの主な目的grep
は、特定の正規表現に一致する行を抽出することです。一部の非標準実装では、行から部分文字列を抽出することもできますが、これは通常、ファイルまたはテキストストリームで行のスクリプト編集を実行するために使用されるエディタgrep
領域を侵害します。sed
基準を使用して、sed
最初に部分文字列と二重引用符で囲まれた文字列を含まない行をすべて削除し、二重引用符で囲まれた文字name=>
列をキャプチャします。次に、一致する行を二重引用符で囲まれた文字列に置き換えます。
sed -e '/.*name=>\("[^"]*"\).*/!d' -e 's//\1/' log.txt
(元のファイルから直接実行する必要があります。)
最初の式は、与えられた/.*name=>\("[^"]*"\).*/!d
正規表現と一致しないすべての行を削除します。また、二重引用符で囲まれた文字列もキャプチャします\1
。
2番目の式は、s//\1/
前の正規表現と一致する行のビットを、残りの行のキャプチャされた二重引用符文字列に置き換えます。
答え2
次のことを試すことができます。
$ grep 'name=>' log.txt | cut -d'"' -f2
|
の出力grep
をの入力にパイプしますcut
。
cut -d'"' -f2
文字で区切られたフィールドの各入力行を切り取り、"
2番目のフィールドを抽出します。
"
都市名の周りに文字を維持するには、おそらく動作しません。
答え3
そしてawk
代わりに使用してください。たとえば、grep
cut
awk -F'"' '/name=>/ {print $2}'
答え4
これに関する限り、二重引用符の間にある内容をキャプチャしただけです。
入力する
$ cat file
name=>"Brie Comte Robert",
name=>"Montcuq",
name=>"Faya-Largeau",
name=>"Paris",
name=>"Madrid",
をするgrep
$ grep -oE '"[^"]+"' file
$ grep -o '"[^"]\+"' file
使用GNU
awk
:
$ awk 'BEGIN{FPAT="\042([^\"]+)\042"} {print $1}' file
出力
"Brie Comte Robert"
"Montcuq"
"Faya-Largeau"
"Paris"
"Madrid"