2017-12-10 12 views
0

ファイル内のユーザー名に文字列を置き換えるためにsedを使用しなければならないシンプルな(少なくとも私はそれはだと思いました)割り当てがあります。ユーザー名と3 '')UNIX Sedと逆文字列検索

-replace:

1) 
2) 
3) 
3) www 
www 3) 
3) 
7) 

割り当ては3つの部分があります。このような、それコンテンツルックスがいることを言うことができます。このコマンドは正しく動作します。

sed -e "s/3)/$USER/" file 

-replace '3)'は、 'www'文字列の行にのみあなたのIDで置き換えてください。 「WWW」なし行だけで、私は3を交換する必要が割り当ての最後の部分で

sed -e "/www/ s/3)/$USER/" file 

)私のIDを持つ:マイナーな改良では最初の部分の形式のコマンドも、仕事を取得します。 sedを使って文字列を検索する簡単な方法はありますか?これまで私は '[]'の中の3文字のセットを否定する考えを思いついたが、残念ながらそれは実際には機能しません。

sed -e "/[^/(www/)]/ s/3)/$USER/" file 

答えて

2

アドレスの後に!を使用してください。ほとんどのシェルで使用されています。

sed -e '/www/!s/3)/'"$USER/" file 
+0

引用符を修正した後、あなたのソリューションは素晴らしいsed -e "/ www /!s/3)/ $ USER /" fileありがとうございます! –

+0

私はちょうど純粋な好奇心から尋ねています:残りの部分が一重引用符で囲まれていると、シェルが$ USER部分だけを変数として解釈させる方法はありますか? '/ www /!s/3'を使用しようとすると/ "$ USER /" 'シェルが$ USERを通常の文字列として解釈します。 –

+0

コマンドラインで!二重引用符で囲まれたものはまだ特別です。引用符はbashに入れ子になっていませんが、 '/ www /!s/3 ')' /" $ USER "/'は引用符で囲む必要があります。 – choroba