次の文を含むファイルがあります。
..........[xxxx][xxxx]
..........[xxxx][xxxx]
..........[xxxx][xxxx]
各文の末尾に[][]が2つあります。 [][]と[][]の対応する内容を新しいファイルに抽出する方法は次のとおりです。
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
私は成功せずにターミナル正規表現を試しました。ありがとう、
答え1
grep
grep
GNU(またはこのオプションをサポートする他のツール-o
)を使って試してみてください。
grep -o '\[[^]]*\]\[[^]]*\]$' file > new_file
出力:
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
答え2
grep
をサポート-o
し、他のことをしない場合は、[
最初の後のすべてをしたいです[
。
$ grep -oP '[^]]*\K\[.*' file
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
[
望ましくない他のものがある場合は、以下を試してください。
$ grep -oP '.*\K\[.+?\]\[.*' file
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
grep
サポートがなければ-o
(私は信じています。ちょうどmacOS) 次のように使用できます。
$ sed -E 's/.*(\[.+?\]\[.*)/\1/' file
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
答え3
POSIX sed:
sed 's/.*\(\[[^]]*\]\[[^]]*\]\)$/\1/' file
\[[^]]*\]
-others[
以外の数字と一致します。]
]
\(\[[^]]*\]\[[^]]*\]\)$
\(\)
最初と唯一のキャプチャグループによってキャプチャされた行の末尾に固定されている2つと一致します。\1
キャプチャされたグループのみが出力に残ります。