ファイル内の対応する単語を制御文字にグローバルに置き換える方法。どうすればいいですか?私は成功せずに次のことを試しました。
Replace "^Aabc_def_a^B" with "^Adef_a^B" globally
以下を試しました。
sed -i 's/^Aabc_def_a^B/^Adef_a^B/g' file.txt
sed -i 's/\^Aabc_def_a\^B/\^Adef_a\^B/g'file.txt
sed 's/x01abc_def_ax02/x01def_ax02/g'
答え1
私のために働くようです:
$ echo -n "^Aword^B" | sed 's/^Aword^B/^Alexical unit^B/' | hexdump -C
00000000 01 6c 65 78 69 63 61 6c 20 75 6e 69 74 02 0a |.lexical unit..|
0000000f
01
代表する^A
;02
^B
キャレット(^
)の後に、A
またはではなくリテラル制御文字を使用していることに注意してくださいB
。sed
作成されたとおりにコマンドを入力するには、次にCtrl制御V文字を使用して入力として解析するのではなく、文字通り挿入しますreadline
。
つまり、を挿入するには、-を^A
押してから-を押すと入力内容が表示されます。このオプションの上に矢印を置くと、画面に2文字で構成されていても、カーソルは常にこのオプションを単一の単位として扱うことがわかります。CtrlVCtrlA^A
答え2
GNU sedでは、次のように動作します。\xHH
$ printf '\001foo\002\n' | sed 's/\x01foo\x02/\x01bar\x02/g' | od -c
0000000 001 b a r 002 \n
GNU sedはありませんが、Bashがある場合は、$''
引用符を使用してシェルから制御文字を生成できます。
$ printf '\001foo\002\n' | sed $'s/\x01foo\x02/\x01bar\x02/g' | od -c
0000000 001 b a r 002 \n
両方がない場合、Perlは常に次のことを理解しています。\xHH
$ printf '\001foo\002\n' | perl -pe 's/\x01foo\x02/\x01bar\x02/g' | od -c
0000000 001 b a r 002 \n
もちろん、同じことができます-i
。