Удаление определенных символов и печать в отдельных строках

Skype ввел облачную систему группового чата, которая требует Skype 4.3. Возможно, это имеет какое-то отношение к этому.

2
задан 16 June 2017 в 08:23

9 ответов

С sed:

sed 's/[KR[:blank:]]\+/\n/g' A.txt
sed 's/[KR[:blank:]]\+/\n/g' A.txt заменить все один или несколько K, R и пробел / вкладку с символом новой строки из A.txt [d3 ]

С awk:

awk -F '[KR[:blank:]]+' '{for(i=1; i<=NF; i++) print $i}' A.txt
sed 's/[KR[:blank:]]\+/\n/g' A.txt заменить все один или несколько K, R и пробел / вкладку с новой строкой из [ f10] {for(i=1; i<=NF; i++) print $i} повторяет и печатает поля

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

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

grep -f <(awk/sed ... A.txt) B.txt

Для точного соответствия добавьте -F:

grep -Ff <(awk/sed ... A.txt) B.txt

Пример:

% cat A.txt 
MSTNPKPQRK  TKRNTNRRPE  DVKFPGGQI

% sed 's/[KR[:blank:]]\+/\n/g' A.txt
MSTNP
PQ
T
NTN
PE
DV
FPGGQI

% awk -F '[KR[:blank:]]+' '{for(i=1; i<=NF; i++) print $i}' A.txt 
MSTNP
PQ
T
NTN
PE
DV
FPGGQI
2
ответ дан 22 May 2018 в 21:29
  • 1
    Дорогой heemayl, я очень ценю ваш спонтанный ответ, можете ли вы сделать мне еще одну услугу, если я хочу напечатать их с K, R аналогично: MSTNPK PQRK TKR NTNRR – Rhea 16 June 2017 в 08:28
  • 2
    @fia Здесь: sed -E 's/[KR[:blank:]]+/&\n/g' A.txt – heemayl 16 June 2017 в 08:33

С sed:

sed 's/[KR[:blank:]]\+/\n/g' A.txt sed 's/[KR[:blank:]]\+/\n/g' A.txt заменить все один или несколько K, R и пробел / вкладку с символом новой строки из A.txt

С awk:

awk -F '[KR[:blank:]]+' '{for(i=1; i<=NF; i++) print $i}' A.txt sed 's/[KR[:blank:]]\+/\n/g' A.txt заменить все один или несколько K, R и пробел / вкладку с новой строкой из A.txt {for(i=1; i<=NF; i++) print $i} повторяет и печатает поля

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

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

grep -f <(awk/sed ... A.txt) B.txt

Для точного соответствия добавьте -F:

grep -Ff <(awk/sed ... A.txt) B.txt

Пример:

% cat A.txt MSTNPKPQRK TKRNTNRRPE DVKFPGGQI % sed 's/[KR[:blank:]]\+/\n/g' A.txt MSTNP PQ T NTN PE DV FPGGQI % awk -F '[KR[:blank:]]+' '{for(i=1; i<=NF; i++) print $i}' A.txt MSTNP PQ T NTN PE DV FPGGQI
2
ответ дан 18 July 2018 в 11:34

С sed:

sed 's/[KR[:blank:]]\+/\n/g' A.txt sed 's/[KR[:blank:]]\+/\n/g' A.txt заменить все один или несколько K, R и пробел / вкладку с символом новой строки из A.txt

С awk:

awk -F '[KR[:blank:]]+' '{for(i=1; i<=NF; i++) print $i}' A.txt sed 's/[KR[:blank:]]\+/\n/g' A.txt заменить все один или несколько K, R и пробел / вкладку с новой строкой из A.txt {for(i=1; i<=NF; i++) print $i} повторяет и печатает поля

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

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

grep -f <(awk/sed ... A.txt) B.txt

Для точного соответствия добавьте -F:

grep -Ff <(awk/sed ... A.txt) B.txt

Пример:

% cat A.txt MSTNPKPQRK TKRNTNRRPE DVKFPGGQI % sed 's/[KR[:blank:]]\+/\n/g' A.txt MSTNP PQ T NTN PE DV FPGGQI % awk -F '[KR[:blank:]]+' '{for(i=1; i<=NF; i++) print $i}' A.txt MSTNP PQ T NTN PE DV FPGGQI
2
ответ дан 24 July 2018 в 19:49

Получение желаемого выхода может быть выполнено несколькими различными способами. Представленные ниже Perl и Awk работают точно так же. Вы можете перенаправить любую команду с помощью оператора > в файл, а затем использовать grep -f pattern.txt data.txt

Например, с помощью perl, представленного ниже, мы можем сделать:

 perl -ne '@s=split /[KR ]/,$_; foreach(@s){ print "$_\n" if !/^$/}'  input.txt  > pattern.txt && grep -f pattern.txt data.txt 

Perl

Подход perl действует так же, как AWK, описанный ниже: разделить строку на столбцы с использованием K, R и пробела в качестве разделителей, а затем перебрать все из них, чтобы печатать только непустые столбцы.

$ perl -ne '@s=split /[KR ]/,$_; foreach(@s){ print "$_\n" if !/^$/}'  input.txt          
MSTNP
PQ
T
NTN
PE
DV
FPGGQI

AWK

$ awk -F '[KR ]' 'BEGIN{OFS="\n"};{$1=$1;print}' input.txt  | awk '!/^$/'                              
MSTNP
PQ
T
NTN
PE
DV
FPGGQI

Основные моменты того, как это работает:

-F позволяет использовать пространство, K и R в качестве разделителей для столбцов (aka fields). BEGIN{OFS="\n"} позволяет нам использовать новую строку в качестве разделителя вывода так, чтобы элементы выходили отделенными символом новой строки. Чтобы применить новый OFS, мы вызываем перестроение текстовой строки с помощью назначения $1=$1 и, наконец, печатаем строку. из-за того, что несколько разделителей столбцов K, R и пространство смежны (например, в PQRK), мы должны отфильтровать пустые строки из первого awk, что и делает второй awk.
0
ответ дан 22 May 2018 в 21:29

Замените K, R и пробельные символы с символами новой строки, сжимая любые несколько экземпляров:

$ tr -s '[KR[:space:]]' '\n' < file
MSTNP
PQ
T
NTN
PE
DV
FPGGQI
0
ответ дан 22 May 2018 в 21:29

Получение желаемого выхода может быть выполнено несколькими различными способами. Представленные ниже Perl и Awk работают точно так же. Вы можете перенаправить любую команду с помощью оператора > в файл, а затем использовать grep -f pattern.txt data.txt

Например, с помощью perl, представленного ниже, мы можем сделать:

perl -ne '@s=split /[KR ]/,$_; foreach(@s){ print "$_\n" if !/^$/}' input.txt > pattern.txt && grep -f pattern.txt data.txt

Perl

Подход perl действует так же, как AWK, описанный ниже: разделить строку на столбцы с использованием K, R и пробела в качестве разделителей, а затем перебрать все из них, чтобы печатать только непустые столбцы.

$ perl -ne '@s=split /[KR ]/,$_; foreach(@s){ print "$_\n" if !/^$/}' input.txt MSTNP PQ T NTN PE DV FPGGQI

AWK

$ awk -F '[KR ]' 'BEGIN{OFS="\n"};{$1=$1;print}' input.txt | awk '!/^$/' MSTNP PQ T NTN PE DV FPGGQI

Основные моменты того, как это работает:

-F позволяет использовать пространство, K и R в качестве разделителей для столбцов (aka fields). BEGIN{OFS="\n"} позволяет нам использовать новую строку в качестве разделителя вывода так, чтобы элементы выходили отделенными символом новой строки. Чтобы применить новый OFS, мы вызываем перестроение текстовой строки с помощью назначения $1=$1 и, наконец, печатаем строку. из-за того, что несколько разделителей столбцов K, R и пространство смежны (например, в PQRK), мы должны отфильтровать пустые строки из первого awk, что и делает второй awk.
0
ответ дан 18 July 2018 в 11:34

Замените K, R и пробельные символы с символами новой строки, сжимая любые несколько экземпляров:

$ tr -s '[KR[:space:]]' '\n' < file MSTNP PQ T NTN PE DV FPGGQI
0
ответ дан 18 July 2018 в 11:34

Получение желаемого выхода может быть выполнено несколькими различными способами. Представленные ниже Perl и Awk работают точно так же. Вы можете перенаправить любую команду с помощью оператора > в файл, а затем использовать grep -f pattern.txt data.txt

Например, с помощью perl, представленного ниже, мы можем сделать:

perl -ne '@s=split /[KR ]/,$_; foreach(@s){ print "$_\n" if !/^$/}' input.txt > pattern.txt && grep -f pattern.txt data.txt

Perl

Подход perl действует так же, как AWK, описанный ниже: разделить строку на столбцы с использованием K, R и пробела в качестве разделителей, а затем перебрать все из них, чтобы печатать только непустые столбцы.

$ perl -ne '@s=split /[KR ]/,$_; foreach(@s){ print "$_\n" if !/^$/}' input.txt MSTNP PQ T NTN PE DV FPGGQI

AWK

$ awk -F '[KR ]' 'BEGIN{OFS="\n"};{$1=$1;print}' input.txt | awk '!/^$/' MSTNP PQ T NTN PE DV FPGGQI

Основные моменты того, как это работает:

-F позволяет использовать пространство, K и R в качестве разделителей для столбцов (aka fields). BEGIN{OFS="\n"} позволяет нам использовать новую строку в качестве разделителя вывода так, чтобы элементы выходили отделенными символом новой строки. Чтобы применить новый OFS, мы вызываем перестроение текстовой строки с помощью назначения $1=$1 и, наконец, печатаем строку. из-за того, что несколько разделителей столбцов K, R и пространство смежны (например, в PQRK), мы должны отфильтровать пустые строки из первого awk, что и делает второй awk.
0
ответ дан 24 July 2018 в 19:49

Замените K, R и пробельные символы с символами новой строки, сжимая любые несколько экземпляров:

$ tr -s '[KR[:space:]]' '\n' < file MSTNP PQ T NTN PE DV FPGGQI
0
ответ дан 24 July 2018 в 19:49

Другие вопросы по тегам:

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