Sed для замены строчных и заглавных строк

Для меня работает следующее: Alt + shift + номер вкладки .

0
23.10.2018, 01:05
4 ответа

Знаете ли вы о флаге i/ Iдля расширения sкоманды (GNU, хотя )?

2
28.01.2020, 02:16

Чтобы заменить «старый» на «новый» и «СТАРЫЙ» на «НОВЫЙ», просто скажите sed сделать и то, и другое:

for file in./*; do
  cat "$file"
  sed -i -e 's/old/new/g; s/OLD/NEW/g' "$file"
done

Не забудьте заключить переменные в кавычки, если у вас есть файл с именемsome filename(с пробелами, символами новой строки или символами табуляции ). Я также добавил -i, расширение GNU sed, учитывая, что вы указали, что можете использовать расширение флага GNU /i , чтобы указать sed редактировать файл в месте -вместо того, чтобы полагаться на teeи буферы для этого.

1
28.01.2020, 02:16

Вы можете использовать perl:

$ cat file
old news
OLD news
old Old oLD news
older news
$ perl -pe 's{(old)}{ ($tmp = $1) =~ tr/OLDold/NEWnew/; $tmp }ieg' file
new news
NEW news
new New nEW news
newer news

Он использует оператор s///для поиска и замены, а при замене он транслитерирует символы из «старых» в «новые», сохраняя регистр отдельных символов. Это работает только потому, что «старый» и «новый» имеют одинаковую длину строки.

Мне нужно использовать временную переменную, потому что $1— это значение -, доступное только для чтения.

2
28.01.2020, 02:16

Учитывая, что строки имеют одинаковый размер, все эти команды будут работать:

<infile sed    'y/OLDold/NEWnew/' >outfile
<infile tr     'OLDold'  'NEWnew' >outfile
        sed -i 'y/OLDold/NEWnew/' infile
0
28.01.2020, 02:16

Теги

Похожие вопросы