Как заменить строку на числа с помощью sed? - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь заменить строку на номер из файла Итак, у меня есть переменная & FLOW, которую нужно изменить на 001, например:

cat file.txt
This is file ' PISP &FLOW'
PISD.DATA.CYCLE&FLOW..ONE

желаемый вывод

This is file ' PISP 001'
PISD.DATA.CYCLE001.ONE

Я попробовал следующие команды в скрипте:

for item in file.txt
do
sed 's/\&FLOW/\./001/g' $item
sed 's/\&FLOW/001/g' $item
done

Это дает ошибку. Вторая команда sed работает, но мне нужно запустить первую команду sed, в противном случае после запуска первой команды sed она будет игнорировать начальную команду sed.

Любая помощь будет оценена!

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Используйте одну команду sed и используйте -i для фактического изменения содержимого файла, и вам нужно передать file.txt в качестве ввода для команды sed:

sed -i 's/&FLOW\.\{0,1\}/001/g' file.txt

См. онлайн демо . Если вы используете его в Mac OS, вам нужно sed -i '' 's/&FLOW\.\{0,1\}/001/g' file.txt. Также см. Файл редактирования sed на месте .

Детали шаблона

Соответствует шаблону POSIX BRE

  • &FLOW - буквальная &FLOW подстрока
  • \.\{0,1\} - 0 или 1 вхождение . char.
1 голос
/ 31 мая 2019

попробуйте это:

for item in file.txt
do
  sed 's/\&FLOW\./001/g' $item
  sed 's/\&FLOW/001/g' $item
done

У вас был избыточный / после FLOW

Это также может работать:

  sed -i 's/\&FLOW[\.]?/001/g' file.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...