sed. Проблема с заменой конца строки ( \n).
Понадобилось мне из нескольких строк почтового конфига вырезать домены и сформировать строку для regex:
awk -F. '{print $2}' <example2.mc >domains.txt
cat domains.txt
hinet
asianet
earthlink
steephost
ttnet
verizon
pacbell
ress
chello
mtu-net
SteepHost
Формирую строку для regex:
paste -s -d'|' domains.txt
hinet|asianet|earthlink|steephost|ttnet|verizon|pacbell|ress|chello|mtu-net|SteepHost
То же самое с.п. tr (лишний последний | вижу - это не беда):
cat domains.txt|tr '\n' '|' >domains2.txt
cat domains2.txt
hinet|asianet|earthlink|steephost|ttnet|verizon|pacbell|ress|chello|mtu-net|SteepHost|
Ради академического интереса пробую обратное преобразование - оно работает!
cat domains2.txt|tr '|' '\n'
hinet
asianet
earthlink
steephost
ttnet
verizon
pacbell
ress
chello
mtu-net
SteepHost
Теперь то, что ПО ПРИВЫЧКЕ пробовалось изначально для замены символов, но почему-то не работает в прямом преобразовании:
sed 's/\n/|/g' <domains.txt
hinet
asianet
earthlink
steephost
ttnet
verizon
pacbell
ress
chello
mtu-net
SteepHost
sed 's/\x0A/|/g' <domains.txt
hinet
asianet
earthlink
steephost
ttnet
verizon
pacbell
ress
chello
mtu-net
SteepHost
Но в обратном-то оно работает !!!
sed 's/|/\n/g' <domains2.txt
hinet
asianet
earthlink
steephost
ttnet
verizon
pacbell
ress
chello
mtu-net
SteepHost
sed 's/|/\x0A/g' <domains2.txt
hinet
asianet
earthlink
steephost
ttnet
verizon
pacbell
ress
chello
mtu-net
SteepHost
В чем тут дело?
P.S. Еще раз повторюсь, что для замены символов первое, что всегда приходит в голову - это sed. Про существование tr & paste забываю всегда напрочь и применяю только после googling'a по инету или спец. тетрадке, в которую записываю интересные решения.