Удалить строки с определенным номером строки, указанным в файле

sed 's/linux-[^ ]* //g'

[^ ]*соответствует всем последующим символам, которые не являются пробелами, а *после этого означает один или несколько

3
03.10.2020, 12:48
4 ответа

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

awk 'NR==FNR { nums[$0]; next } !(FNR in nums)' linenum infile

в конкретном случае, когда файл 'linenum' может быть пустым, awk пропустит его, поэтому он не будет печатать целые строки 'infile', тогда, чтобы исправить это, используйте команду ниже:

awk 'NR==FNR && FILENAME==ARGV[1]{ nums[$0]; next } !(FNR in nums)' linenum infile

или даже лучше (благодаря Стефану Шазеласу):

awk '!firstfile_proceed { nums[$0]; next } 
     !(FNR in nums)' linenum firstfile_proceed=1 infile
8
18.03.2021, 23:00

Используйте sed для написания программы sed.

sed "$(sed 's/$/d/' A.txt)" B.txt > C.txt

«Программу» можно сделать более сложной, например, она может проверять, что строки являются только числами, или изобретать синтаксис для комментариев и удалять их.

4
18.03.2021, 23:00
for i in `cat fileA`; do  sed -n ''$i'p' fileB; done >>content.txt
for i in `cat content.txt`; do sed -i '/^'$i'$/d' fileB;done

output
B
C
0
18.03.2021, 23:00

Другой способ сделать это:объединение основных команд оболочки:

join -v1 <(nl file) line_numbers | cut -d' ' -f2-

или:

nl file | join -v1 - line_numbers | cut -d' ' -f2-

Используйте nlдля нумерации строк файла, а затем join -v1сохранит только строки без совпадений во втором файле, наконец, cutномер строки. Файл line_numbersдолжен быть отсортирован.

1
18.03.2021, 23:00

Теги

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