Как удалить запятую (,) между двумя словами с помощью Bash

Что-то вроде этого может выполнить эту работу (с помощью awk-скрипта найдите 1-й токен, чтобы он был тире, а 3-й, чтобы быть строкой «сумма»):

awk '$1=="-" && $3=="amount" {print $2}'

Если вы хотите, чтобы вся строка была напечатана, используйте что-то вроде:

awk '$1=="-" && $3=="amount" {print}'
1
09.08.2017, 23:54
4 ответа

В случае, если вокруг запятой могут быть пробелы или другие пробелы-sedрешение:

sed 's/[[:blank:]]*,[[:blank:]]*/\
/g' file

В некоторых реализациях sedвы можете заменить \<newline>на \n.

4
27.01.2020, 23:10

Вы можете использовать cutследующим образом:

Я не знаю, откуда берутся ваши данные. Но я уверен, что вы можете передать свою информацию наcut:

cat yourfile.data | cut -d, --output-delimiter ' ' -f 1,2

согласноman cut

...
-d, --delimiter=DELIM
       use DELIM instead of TAB for field delimiter
--output-delimiter=STRING
       use STRING as the output delimiter the default is to use the input delimiter
-f, --fields=LIST
       select only these fields;  also print any line that contains no delimiter character, unless the -s option is specified
...

Но если вам нужно добавить дополнительную логику, я рекомендую вам использовать sed, как сказал @RomanPerekhrest. У вас будет более гибкий способ анализа данных с помощью мощных регулярных выражений. На мой взгляд, лучшим регулярным выражением для этого было бы:

'/^\s*\([^,]\+\)\s*,\s*([^,]\+\)\s*$/'

~0 или более пробелов после чего-либо, кроме запятой, после 0 или более пробелов, запятой, 0 или более пробелов после чего-либо, кроме запятой, после 0 или более пробелов.

1
27.01.2020, 23:10

Если вы хотите сохранить структуру столбцов, вот как можно заменить только запятые пробелами.

В баш:

while IFS=, read -r field1 field2; do
    printf "%s %s\n" "$field1" "$field2"
done < test.txt

Ссылка:http://mywiki.wooledge.org/BashFAQ/001

0
27.01.2020, 23:10

С помощьюtr(в конкретном случае, который вы предоставили ), вы можете перевести commaвnew line

user@server[/test]> cat text.txt
ent0
ent4
ent1,ent5
ent2,ent6
ent3,ent7
ent29,ent30
user@server[/test]> cat text.txt| tr "," "\n"
ent0
ent4
ent1
ent5
ent2
ent6
ent3
ent7
ent29
ent30
0
27.01.2020, 23:10

Теги

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