2016-11-22 4 views
-1

上のセッドスイッチコメント:私はサンプルファイルてきた検索文字列

abcd 
1234 
asdfg 
#text = "1234" 
text = "1234, 2345" 
abc 
def. 

私はコメント#テキストを切り替えたいが*このような:

abcd 
1234 
asdfg 
text = "1234" 
#text = "1234, 2345" 
abc 
def. 

と再び:

abcd 
1234 
asdfg 
#text = "1234" 
text = "1234, 2345" 
abc 
def. 

私はこのコマンドを使用しようとしています:

sed -i '/text/ s/^#*/#/' file 

ただし、これはテキストの最初の発生時にのみです。どんな助けもありがとう。

sed '/^#*text/{s//#&/;s/##text/text/}' file 

あるいは、短い:

sed '/^#*text/{s//#&/;//s/##//}' file 

#text(およびオプションの先頭#を含む)で始まる行の先頭に挿入され

+0

行は常に互いに隣り合っていますか? – Sundeep

+0

はい - 行は常に隣り合っています。 – Kris

答えて

1

はこれを試してみてください。言い換えれば:

  • ^text##をリードする前に、##textに置き換えられます#text
  • ^#textに置き換えられます私が使用
+0

@Sundeepあなたが正しいです、私は編集しました。 – SLePort

+2

良いことに、二重引用符を避けることもお勧めします... – Sundeep

1
sed -i "s/^#text/__temp__/;s/^text/#text/;s/__temp__/text/" file 
+0

必要がない限り二重引用符を避ける... – Sundeep

0
sed -n -e '/^[^text]/ H; /^text/ { s/^text/#text/; x; s/\n#text/\ntext/g; G; s/^\n//g; p; s/.*//; h;}; $ {x; s/^\n//g; p;}' 

が削除されます。

s/^\n//g 
0ホールドスペースをクリアするための末尾のホールドスペースの新しいラインをクリアし

s/.*//;h 

ため