web-dev-qa-db-ja.com

sedの制御文字の置き換え

Linuxのテキストファイル内のすべての制御文字CTRL + A(SOH/ascii 1)を置き換える必要があります。これはSEDでどのように実現できますか?

19
myahya

これはcatを通じて-v(同等の--show-nonprintingオプションとこれをsedにパイプします。

制御文字が見出しの開始(SOH)文字(CTRL + A/ASCII 1))であり、それをタブで置き換える場合は、次のようにします。

cat -v file | sed 's/\^A/\t/g' > out

cat -vは、SOH文字を^ Aに置き換えます。^ Aは、sedで照合されて置き換えられます。

19
myahya

試してください:

sed 's/^A/foo/g' file

使用する Ctrl+V+A 上記のコマンドで^Aシーケンスを作成します。

26
dogbane

「置換」とは、ファイルを「インプレース」で変更することを想定しています。

GNU sedを使用:

# Create a file with a single control character (SOH)
echo -e "\x01" > file
# Change SOH control characters to the literal string "SOH"
sed -i 's/\x01/SOH/g' file
# Check result
cat file

与える...

SOH

-iオプションはOS X sedでは機能しないため、sedを一時ファイルにパイピングすることで回避する必要があります。

19
Martin Ellis

何に置き換えますか?置換が1文字の場合は、trよりもsedの方が適しています。文字「a」で置き換えるには:

tr '\1' a < input-file > tmp && mv tmp input-file
6
William Pursell

Trコマンドを使用できます

tr -s '\ 001' '|'新しいファイル

tr -s "Wordまたはdelimiter"を "Wordまたはdelimiter" newfileに置き換えたい

0
Suman