テキストが変数によって生成されることがわかったら、Grapを使用して文字チェーンからテキストの前後の文字をどのように削除できますか?

テキストが変数によって生成されることがわかったら、Grapを使用して文字チェーンからテキストの前後の文字をどのように削除できますか?

私はそれを使用しています

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代わりに使用してください。たとえば、grepcut

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"

関連情報