Замена управляющего символа в sed
Мне нужно заменить все вхождения управляющего символа CTRL + A (SOH/ascii 1) в текстовый файл в linux, как это можно сделать в SED?
Ответы
Ответ 1
Это можно сделать с помощью cat
с параметрами -v
(эквивалентно --show-nonprinting
и подключить его к sed
).
Если управляющий символ - символ начала начала (SOH) (CTRL + A/ASCII 1), и мы хотим заменить его вкладкой, мы сделаем следующее:
cat -v file | sed 's/\^A/\t/g' > out
cat -v
заменит символ SOH на ^ A, который затем будет сопоставлен и заменен в sed
.
Ответ 2
Try:
sed 's/^A/foo/g' file
Используйте Ctrl + V + A для создания последовательности ^A
в приведенной выше команде.
Ответ 3
Под "replace" я предполагаю, что вы хотите изменить файл "на месте".
Использование команды GNU:
# 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 с временным файлом.
Ответ 4
Что вы хотите заменить? Если замена является единственным символом, tr
является лучшим выбором, чем sed
. Чтобы заменить буквой "a":
tr '\1' a < input-file > tmp && mv tmp input-file
Ответ 5
Вы можете использовать команду tr
tr -s '\ 001' '|' NewFile
tr -s "слово или разделитель" хотите заменить словом "word или delimiter" newfile