Строчные изменения в Unix

Я ищу способ сделать следующее с файлом с разделителями каналов в UNIX, для EACH LINE и не уверен, с чего начать:

  1. Ищите символ в строке текста (предположим, используя GREP?)
  2. Если найдено, то добавьте текст в конце этой строки (используя SED?)
  3. Если не найти, найдите другой символ в той же строке
  4. Если найдено, добавьте текст в конец строки, ничего не сделайте
  5. LOOP ДЛЯ ВСЕХ ЛИНИЙ В ФАЙЛЕ

Любые указатели будут оценены.

2 Solutions collect form web for “Строчные изменения в Unix”

Это все работает, вам не нужны дополнительные инструменты:

Предположим, вы хотите добавить foo в конец строки, содержащей f и bar в конце строк без f , но с b

 sed '/f/{ s/$/foo/ b } /b/s/$/bar/' 

Вы можете «адресовать» строки с помощью /pattern/ , поэтому следующие команды выполняются только в том случае, если они содержат шаблон. Таким образом, в этом примере только строки, которые содержат f запускают выполнение замены s и b ( {} group) команды, поэтому все внутри применяется только при согласованном адресе. b ветвится до конца скрипта не добавляйте другую строку для соответствия b .

Разный подход без ветви:

 sed '/f/s/$/foo/;s/^[^f]*b[^f]*$/&bar/' 

Как упражнение, вы можете понять это самостоятельно с некоторыми знаниями, используя man sed если это необходимо.

Если вы хотите добавить одну и ту же текстовую строку в конце строки для обоих сценариев (символы, которые нужно найти: «X» «Y»), вы можете сделать это следующим образом:

 sed -e 's/[XY].*/&__ADDEDTEXT__/' yourfile 

С другой стороны, если вы хотите, чтобы отдельные тексты помещались в конце строк в зависимости от символа, вы можете сделать:

 sed -e ' /X/s/$/__TEXT1__/; t /Y/s/$/__TEXT2__/ ' yourfile 

Где мы используем команду t (read as test), чтобы определить, была ли превалирующая команда s/// успешной и перейти к концу sed-кода в текущей строке. Также обратите внимание на синтаксис: / regex / s /// =>, если строка содержит регулярное выражение, затем выполните подстановку в строке.

  • как переносить слова, выравнивать текст, как вывод человека?
  • Как конвертировать .txt или .html файлы в multipages .DOCX файл?
  • Заменить контент внутри двух конкретных строк
  • Можно ли просматривать два текстовых файла бок о бок (только для чтения)?
  • Программа Shell для отображения текстовых файлов с линейкой столбцов
  • Есть ли автообновляющий графический читатель текстовых файлов?
  • Получите список файлов Linux, рекурсивный и прямой вывод в файл
  • почему emacs останавливает суперпользователя от редактирования файлов без разрешения?
  • Включает ли vi в конце файла новую строку (LF)?
  • Что называется символом ^ М?
  • Потоки бит каретки и поток строки в двоичном файле во время загрузки TFTP в режиме ASCII
  • Linux и Unix - лучшая ОС в мире.