Дополнительные "-" в конце строки - PullRequest
0 голосов
/ 13 марта 2020

У меня есть файл .txt, который состоит из нескольких строк. Некоторые из этих строк начинаются с цифр. Я хочу найти эти строки и объединить их в одну строку и записать вывод в другой файл .txt.

Hello
I'm fine
1first
2second
ok

Я хочу, чтобы результат был таким: 1first-2last

Поэтому Я использую этот код:

grep '^[0-9]' first.txt | tr '\n' '-' > last.txt

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

1first-2last-

Как этого избежать? Я не хочу - по моей линии.

Ответы [ 3 ]

2 голосов
/ 13 марта 2020

Использование ed:

printf '%s\n' 'v/^[0-9]/d' '1,$-1s/$/-/' '%j' 'wq last.txt' | ed first.txt

Это удалит все строки, которые не начинаются с цифры, добавьте - к каждой строке, кроме последней, затем присоединитесь к ним, затем запишите результат в last.txt (не обратно в first.txt, прежде чем выйти без сохранения изменений в first.txt.

$ cat first.txt
Hello
I'm fine
1first
2second
ok
$ printf '%s\n' 'v/^[0-9]/d' '1,$-1s/$/-/' '%j' 'wq last.txt' | ed first.txt
33
?
$ cat last.txt
1first-2second
$ cat first.txt
Hello
I'm fine
1first
2second
ok

ed просто читает команды из стандартный ввод, так что вы можете использовать здесь документ, если вы предпочитаете:

ed first.txt <<'EOF'
v/^[0-9]/d
1,$-1s/$/-/
%j
wq last.txt
EOF
1 голос
/ 13 марта 2020

Если ваш файл достаточно короткий, чтобы встроенная обработка строки bash была адекватной, это может быть просто:

readarray -t lines <first.txt
IFS=-
printf '%s\n' "$*" >second.txt
1 голос
/ 13 марта 2020

Вы можете заменить последний - на новую строку.

grep '^[0-9]' first.txt | tr '\n' '-' | sed 's/-$/\n/'

или ни на что:

grep '^[0-9]' first.txt | tr '\n' '-' | sed 's/-$//'

Но если вы хотите объединить строки с - в качестве разделителя Вы хотите:

grep '^[0-9]' first.txt | paste -sd'-' -
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...