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