.ignore
という名前のファイルがあります。 projdir
を置き換える必要があります。例えば:
ignore \..*
ignore README
projdir Snake
Snakeを「PacMan」などに置き換える必要があります。 manページを読みましたが、どうすればよいかわかりません。
projdir
で始まる行を検索し、行全体を新しい行で置き換えます。
sed -i 's/^projdir .*$/projdir PacMan/' .ignore
^
および$
は行頭/行末マーカーなので、パターンは行全体に一致します。 .*
はすべてに一致します。 -i
は、変更を単に出力するのではなく、直接.ignore
に書き込むようにsed
に指示します
1つのアプローチは、保持したい部分の後方参照を使用して、行全体を書き直すことです。
sed -e 's/^\( *projdir *\)[^ ]*\(.*\)*$/\1PacMan\2/'
別のアプローチは、行のその部分を書き換えることですが、他の部分が一致する場合のみです。
sed -e '/^ *projdir / s/ [^# ]/ PacMan/'
どちらの例も、最初のWordがprojdir
である行の2番目の空白区切りのWordを書き換えます。
これは古い投稿であり、受け入れられた回答で解決されたようですが、実際の質問には回答されていません。完全性のために、そして他者を助けるために:
ここでは、「Snake」に実際に一致し、「projdir」で始まる行には一致しない答え...
sed -r 's/(^.*)Snake/\1PacMan' .ignore
これにより、「Snake」を含む行の最初からすべてが「Snake」+「PacMan」の前のすべてに置き換えられます。\1は()内で一致するものを表します。 「Snake」以降はすべてそのままです。
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore
^ projdirは、文字列projdirで始まる行を検索します。そこの。* $は、同じ行の行のprojdirの後の文字列を表します。文字列projdir PacManは、置き換える文字列です。 gはグローバルです。projdirで始まるすべての行を置き換えます。 .ignoreはファイルの名前です