デフォルトでは、次のような行があります。
ILU1910\ilu0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ”
ILU1910\ilu0001 “ It is going make life harder for us , ” he said .
私は彼らが次のように見えることを望みます:
<ignore>ILU1910\ilu0001</ignore> “ My hand is broken , ” said the sailor , “ and smoked the pipe . ”
<ignore>ILU1910\ilu0001</ignore> “ It is going make life harder for us , ” he said .
<ignore>
デフォルトでは、各行の先頭にILU1910 / ilu0001があり、そのフレーズの先頭と末尾に追加したいと思います</ignore>
。
次のコマンドを使用して動作しようとしました。
cat file.txt | sed 's/^\([^A-Za-z0-9]\+ \)/<ignore>\1<\/ignore>/g'
しかし、これはうまくいかないようです。私はMacBookで端末を使用しています。
答え1
使用は簡単ですsed
。
sed 's/ILU1910\\ilu0001/<ignore>&<\/ignore>/' file.txt
一致させるパターンは1つだけなので、使用すると簡単に一致させることができます&
。使いたいcat
なら
cat file.txt | sed 's/ILU1910\\ilu0001/<ignore>&<\/ignore>/'
あなたの試みで英数字以外のすべてをカバーしています[^A-Za-z0-9]
。[^ ]*
以下を使用して、空白以外のパターンでパターンを変更できます。
sed 's/^[^ ]*/<ignore>&<\/ignore>/' file.txt
答え2
ファイルを適切に編集したい場合は、次のスクリプトを使用して変更を作成できますed
。
ed -s file.txt <<< $'1,$s,ILU1910\\\\ilu0001,<ignore>ILU1910\\\\ilu0001</ignore>,\nw\nq'
これはサイレントモードed
で呼び出され、-s
引用符で囲まれた文字列にコマンドリストを送信します。
1,$s,ILU1910\\\\ilu0001,<ignore>ILU1910\\\\ilu0001</ignore>,
- 各行()で最初の部分を検索し、1,$
()を2番目の部分に置き換えます。s, ... , ... ,
代替テキストにスラッシュがあるため、検索テキストまたは代替テキストにコンマがないため、/
一般区切り記号をコンマ()に変更しました。,
バックスラッシュはシェルによって引用され解釈されるので、2回ed
2倍に増やす必要があり、これが\
1が4になる方法です\\\\
。w
- ファイルをディスクに書き換えるq
- 編集終了