Bash: заменить всю строку в одном столбце на основе соответствующей подстроки - PullRequest
0 голосов
/ 25 октября 2018

У меня большой файл с множеством столбцов и строк.Я хотел бы заменить всю строку в первом столбце на основе подстроки, которая является общей для всех строк, которые я хочу заменить.Вот пример того, что у меня есть:

AAA_1765 866 HTG
AAA_1873 987 IGA
AAA_1922 413 BOK

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

BBB_2 866 HTG
BBB_2 987 IGA
BBB_2 413 BOK

Я работал с sed, чтобы выполнить поиск / замену:

sed 's/^AAA_1*/BBB_2/' infile.txt >outfile.txt
sed 's/^AAA_1.*/BBB_2/' infile.txt >outfile.txt

Но первое использование заменяет только подстроку AAA_1 на BBB_2 и сохраняет остальную часть строки (я хочу полныйстрока должна быть заменена на BBB_2), а при втором использовании вся строка заменяется на BBB_2 (я хочу заменить только строку в первом столбце).

Может, мне нужен awk?Любые предложения будут полезны.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Простое решение awk:

awk '/^AAA_1/ { $1 = "BBB_2" } 1' file

BBB_2 866 HTG
BBB_2 987 IGA
BBB_2 413 BOK
0 голосов
/ 25 октября 2018

Вы можете сопоставить любые 0+ цифр после AAA_1, используя

sed 's/^AAA_1[0-9]*/BBB_2/' infile.txt > outfile.txt

См. online sed demo .

Это регулярное выражение соответствует

  • ^ - начало строки - AAA_1 - литеральная подстрока
  • [0-9]* - ноль или более цифр (если подразумевается любой не пробел, вы можете заменить его на[^ ]*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...