私ファイル.txt1行が含まれます:
[MOVING] From [/source/foo.txt] to [/dest/bar.txt]
基本的に、角かっこのペア内から3番目のグループを抽出する正規表現を探したいと思います。[]
予想する /dest/bar.txt
これまで、私は次のことを思い出しました。
$> cat file.txt | grep ".*From.*to.*" | grep -oP '(?<=to ).*$' | cut -d "[" -f 2 | cut -d "]" -f 1
動作しますが、エレガントなソリューションとはまったく異なります。誰でもこれを達成する方法を知っていますか?
答え1
grep -o '\[[^]]*\]$' file.txt | sed 's/\[//; s/\]//'
これにより、grepが行末に固定され、角かっこと必要なテキストが抽出されます。このsed
コマンドは括弧を削除します。
答え2
$ echo "$a"
[MOVING] From [/source/foo.txt] to [/dest/bar.txt]
$ echo "$a" |egrep -o '\[.[^ ]+\]$'
[/dest/bar.txt]
答え3
cut
目的の開口部ブラケットの後ろの部分を抽出するために使用でき、加工ブラケットの後ろの部分を取り除くには、sed完了を使用できます。
cut -d '[' -f 3 | sed 's/].*//'
または、単一のsedまたはawkコマンドを使用してこれを実行できます。
sed 's/^[^[]*\[\([^\]\)]*\][^[]*\[\([^\]\)]*\][^[]*\[\([^\]\)]*\].*$/\3/'
gawk -F '(^|\\])[^[]*(\\[|$)' '{print $4}'
awk '{split($0, a, "(^|\\])[^[]*(\\[|$)"); print a[4]}'
両方の awk コマンドでは、最初の区切り文字が文字列の先頭から始まるので、フィールド 1 は空であるため、3 番目の角かっこグループはフィールド 4 です。