テキストファイルで見つかった正規表現パターンが表示されるたびにスペースを追加したいと思います。
例:
xadsfa 1 - 2 --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4 --- --- --- asdf
「1 -2」または「2 - 4」を一致させたい。私は次のようなパターンを思いついた。
[0-9]\s-\s[0-9]
では、次のように各一致にスペースを追加したいと思います。
xadsfa 1 - 2 --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4 --- --- --- asdf
答え1
次のツールを使用すると簡単ですsed
。
$ sed 's/[0-9]\s-\s[0-9]/& /' file
xadsfa 1 - 2 --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4 --- --- --- asdf
この演算子は、入力ファイルの各行にs/foo/bar/
最初に表示される部分を置き換えますfoo
。bar
合わせたいならみんな行が与えられたらg
:を使用してくださいs/foo/bar/g
。これは&
「一致するコンテンツ」なので、s/[0-9]\s-\s[0-9]/& /
最初に表示される正規表現は、一致するコンテンツにスペースを加えたものに置き換えられます。
タブや他のスペースではなく単一のスペースのみを一致させる場合は、スペースを使用する理由はありません\s
。
sed 's/[0-9] - [0-9]/& /' file
最後に、ファイル自体を変更するには、次のようにします。-i
(これはGNUを仮定し、sed
構文は他の実装とは若干異なります。また、ファイルをsed操作の結果に置き換えます。追加する前に必要な操作を実行していることを確認してください-i
。):
sed -i 's/[0-9] - [0-9]/& /' file