Может ли 'sed' сделать 'или' классную обрезку? - PullRequest
0 голосов
/ 05 июля 2018

Я работаю с куском кода, но это ужасно. У этого есть неприятная линия в этом вдоль линий:

s/COM/ALPHA BETA GAMMA COM/g
s/DLX/ALPHA BETA GAMMA DLX/g
s/BE4/ALPHA BETA GAMMA BE4/g
s/BE2/ALPHA BETA GAMMA BE2/g
s/RS/ALPHA BETA GAMMA RS/g

Если найдены какие-либо из BE2, RS и т. Д., То он будет заменен на Alpha Beta Gamma COM/DLX/BE4/BE2/RS. Однако, если все три найдены, каждый из них будет заменен. Поскольку идеальный результат будет:

ALPHA BETA GAMMA COM DLX BE4 BE2 RS

в любом случае, пожалуйста, закодируйте это в sed? Это действительно «или NED или JED или TED». В качестве альтернативы можно использовать другой Linux?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вот один из способов. С входным файлом file.txt:

NED one
two TED
3 JED 4

Вы можете сделать это:

sed 's/NED\|TED\|JED/ALPHA BETA GAMMA &/g' file.txt
ALPHA BETA GAMMA NED one
two ALPHA BETA GAMMA TED
3 ALPHA BETA GAMMA JED 4
0 голосов
/ 05 июля 2018

Я понимаю, что вы хотите добавить строку с любой из альтернатив, перечисленных вами, с ALPHA BETA GAMMA.

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

echo "COM, DLX, BE4, BE2 and RS" | sed -E 's/.*\<(COM|DLX|BE4|BE2|RS)\>/ALPHA BETA GAMMA &/'
# => ALPHA BETA GAMMA COM, DLX, BE4, BE2 and RS

См. онлайн sed демо .

Детали

  • -E - опция включения POSIX ERE
  • .* - любые 0+ символов
  • \< - граница начального слова
  • (COM|DLX|BE4|BE2|RS) - соответствует COM или DLX или BE4 или BE2 или RS
  • \> - конечная граница слова
  • ALPHA BETA GAMMA & - заменить на ALPHA BETA GAMMA, пробел и значение полного совпадения (&).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...