sed :как вставить новую строку в регулярное выражение?

$ sed -e 's/|/","/g' -e 's/=/"="/g' -e 's/\t/\t"/' -e 's/$/"/' input.txt

Это будет:

  • заменить любой |на,
  • заменить любой =на"="
  • заменить первую позицию табуляции на\t"
  • добавить "и конец строки

Самый простой способ с awk— перейти на разделители полей:

$ awk -v FS="|" -v OFS='","' '{$1=$1}1' \
  | awk -v FS="=" -v OFS='"="' '{$1=$1}1'\
  | awk -v FS="\t" '{print $1,"\""$2"\""}' input.txt
2
08.10.2020, 14:09
1 ответ

Попробуйте это с помощью GNU sed:

$ sed 's/\([a-z]\+\)\([A-Z]\)/\1\n\2/g' text.txt 

Для вашего ввода это дает:

s Apart
CD Compact Disc
CD-ROM Compact Disc-Read-Only Memory
CD-RW Compact Disc-Rewritable
CDFS Compact Disc File System
CERT Computer Emergency Response Team
CFS Central File System, Common File System, or Command File System
ACRONYM SPELLED OUTCGA Computer Graphics and Applications
CIDR Classless Inter-Domain Routing
CIFS Common Internet File System
CMOS Complementary Metal-Oxide Semiconductor
CNR Communications and Networking Riser
COMx Communication port (x=port number)CPU Central Processing Unit
CRT Cathode-Ray Tube
Daa
S Data as a Service
DAC Discretionary Access Control
DB-25 Serial Communications D-Shell Connector, 25 pins
DB-9 Serial Communications D-Shell Connector, 9 pins
DBaa
S Database as a Service DC Direct Current
DDo
S Distributed Denial of Service
DDR Double Data Rate
DDR RAM Double Data Rate Random Access Memory
DFS Distributed File System
DHCP Dynamic Host Configuration Protocol
DIMM Dual Inline Memory Module
DIN Deutsche Industrie Norm
DLT Digital Linear Tape
DLP Digital Light P

Некоторые пояснения:

Я предполагаю, что вы знаете, что такое "группа захвата", так как вы понимаете шаблон.

Строка 's/\([a-z]\+\)\([A-Z]\)/\1\n\2/g'разбита на 4 части по символу /.

Первая часть sозначает замену .

Вторая часть — это шаблон. Шаблон содержит две группы захвата:[a-z]\+и [A-Z]. Возьмите слово «DDoS» в вашем вводе для примера. первая группа захвата будет захватывать «o», а вторая группа захвата будет захватывать «S». Весь шаблон соответствует "oS".

Третья часть \1\n\2заменит строку, соответствующую шаблону. \1относится к первой группе захвата [a-z]\+и в примере с «DDoS» это «o». \2относится ко второй группе захвата [A-Z]и в примере с DDoS это «S». \nозначает символ перевода строки. Таким образом, объединив их вместе, вы получите "o\nS", который заменит совпадающую строку "oS".

Четвертая часть gозначает глобальную . Если опущено, sedнайдет первое совпадение, выполнит подстановку и выйдет. С помощью gsedбудет искать все совпадающие строки и выполнять замену.

Подробное описание можно найти в руководстве sed .

1
18.03.2021, 22:58

Теги

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