sed/bash は左右の角かっこを別々に扱います。

sed/bash は左右の角かっこを別々に扱います。

次の内容を含むファイルがあります。

[root@server list]# cat filenames.txt
[AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','RENTCOGH','TESTENT','DORASINE','LOKAWINK','BBB]
[root@qa4app01 list]#

私はこれをPythonスクリプトのリストとして使用したいので、andAAA'に変更してみて、andをandに置き換えると思いました。'AAA''BBB'BBB'sed[[']']

確認するために、次のことを試しました。

[root@server list]# cat filenames.txt | sed "s/]/']/g"
[AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','MENSCOGH','TESTENT','DORASINE','LOKAWINK','BBB']
[root@server list]#

]働いた。']AAA

[root@server list]# cat filenames.txt | sed -e "s/]/']/g" -e "s/[/['/g"
sed: -e expression #2, char 8: unterminated `s' command
[root@server list]#

[OK] 何らかの理由で追加のsedコマンドが正常に動作しないようです。これを確認するために、sed左角かっこを別々に試しました。

[root@server list]# cat filenames.txt | sed  "s/[/['/g"
sed: -e expression #1, char 8: unterminated `s' command
[root@server list]#

奇妙な。sed開くかっこと角かっこが異なるように扱われているようです。逃げずに逃げることができ[、逃げずに拒否できるキャラクターsed]私は次のように左角かっこにエスケープ文字を追加して欲しいものを得ました。

[root@server list]# cat filenames.txt | sed -e "s/]/']/g" -e "s/\[/\['/g" ['AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','MENSCOGH','TESTENT','DORASINE','LOKAWINK','BBB'] [root@server list]#

私は大括弧のインスタンスがたくさんあるファイルを処理するPython +シェルスクリプトを書いています。私の質問は、sed左右の角かっこを別々に処理するかどうかですbash

sed バージョンは GNU sed バージョン 4.2.1 です。

PS:安全のために角かっこ内にエスケープ文字を使用することにしましたが、私が行っている場所でエスケープ文字を使用しないとスクリプトが破損しないことを絶対に確信するために(読みやすくするために)右角かっこのみを使用します。]

答え1

[紹介したキャラクタークラス閉じ]てください。

sedがその内容だけを見ているなら](つまり、コマンドを閉じると)大丈夫です。 sed はこれが特別なコマンドではないと仮定します。

[閉じずに使用するだけでは]混乱するので、sedエスケープする必要があります。

ところが、そうする必要はない。

  • g(グローバル)フラグ(1行に1つのみ交換)
  • [代替脱出。

私はあなたの変更を管理します

sed -e "s/]/']/" -e "s/\[/['/" 

答え2

Archemarはこれが失敗する理由を説明しています[。ここにこの特定の交換を実行する別の方法があります。

$ sed "s/^./['/;s/.$/']/" file
['AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','RENTCOGH','TESTENT','DORASINE','LOKAWINK','BBB']

または&which を使用して「マッチしたばかりのアイテム」を意味します。

$ sed "s/^./&'/;s/.$/'&/" file
['AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','RENTCOGH','TESTENT','DORASINE','LOKAWINK','BBB']

関連情報