各行の特定のフレーズにタグを追加する

各行の特定のフレーズにタグを追加する

デフォルトでは、次のような行があります。

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回ed2倍に増やす必要があり、これが\1が4になる方法です\\\\
  • w- ファイルをディスクに書き換える
  • q- 編集終了

関連情報