たとえば、次のようになります。
$ cat test001.txt
this
is a
test bucket
bucket line not this one.
bucket lein endy
bucket and others endy
and
a ttest
スペースを無視して「bucket」で始まる行を「(bucket」に変更するにはどうすればよいですか?
これまで私は以下を持っています:
sed -i 's/^\sbucket/bucket(/g' test001.txt
ただし、これは機能しません(変更とエラーはありません)。次に、次の行に対してこれを行いたいと思います。返品「endy」で終わります(したがって、3つのバケット行のうち2つのみ)。
ベストアンサー1
\1
代替用語には逆参照(例:)を使用できます。これは\(…\)
検索語のサブ式を置き換えます(角かっこ - 内のものは除く)。例えば、
$ cat test001.txt | sed -e 's/^\([[:space:]]*\)\(bucket.*endy\)$/\1(\2/'
this
is a
test bucket
bucket line not this one.
(bucket lein endy
(bucket and others endy
and
a ttest
2つのサブ式が生成されます。
- 先行スペース:
^\([[:space:]]*\)
- 「bucket」で始まり、「endy」で終わる文字列(EOLで):
\(bucket.*endy\)$
\1(\2
次に、空白、開き括弧、最後にbucket..endy文字列に一致するすべての行を置き換えます。