パターン「000」を含む行の前に#
を追加する必要があります。たとえば、次のサンプルファイルを検討します。
This is a 000 line.
This is 000 yet ano000ther line.
This is still yet another line.
コマンドを実行すると、_000が見つかったファイルの先頭に#
が追加されます。結果は次のようになります。
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line.
私ができる最善のことは、このように複雑すぎると思われるwhileループです:
while read -r line
do
if [[ $line == *000* ]]
then
echo "#"$line >> output.txt
else
echo $line >> output.txt
fi
done < file.txt
パターンが見つかった行の先頭に#
を追加するにはどうすればよいですか?
これはあなたのために働くかもしれません(GNU sed):
sed 's/.*000/#&/' file
次のsedコマンドが機能します。キャプチャグループは必要ありません。
sed /000/s/^/#/
説明:
/000/
は、000
の行に一致しますs
は、上記で一致した行で置換を実行します#
)が挿入されます(^
)問題は、ファイル内のこれらの行にポンド記号を追加する方法でした。そのため、ティムクーパーの優れた答えをより完全にするために、以下を提案します。
sed /000/s/^/#/ > output.txt
または、sedの機能を使用して問題のファイルをインプレース編集し、次のようなバックアップコピーを作成することを検討できます。
sed -i.bak /000/s/^/#/ file.txt
「-i」オプションは、ファイルをインライン/インプレースで編集および保存します。「-i.bak」オプションは、何かがおかしくなった場合に元のファイルをfile.txt.bakにバックアップします。
「.bak」を好みのサフィックスに置き換えることができます。例:「-i.orignal」は元のファイルを「file.txt.orignal」として作成します
またはed
を使用します:
echo -e "g/000/ s/^/#/\nw\nq" | ed -s FILENAME
またはedでファイルを開きます:
ed FILENAME
そしてこのコマンドを書く
g/000/ s/^/#/
w
q
これを試してくださいGNU= sedコマンド、
$ sed -r '/000/ s/^(.*)$/#\1/g' file
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line.
説明:
/000/
sed置換は、000
を含む行でのみ機能します。対応する行を見つけると、その前に#
記号を追加します。そしてawkを通じて、
$ awk '/000/{gsub (/^/,"#")}1' file
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line
gsub
関数は、#
を含む行の前に000
を追加するために使用されます。