Замена управляющего символа в 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

Другие вопросы по тегам