sed с двумя условиями

другой вариант

ls -i 

, который дает (с правильным значением inode)

5233 > option[value='2016']   5689 foo

, затем

find . -inum 5233 -delete

optionnaly (для предварительного просмотра)

find . -inum 5233 -print

, вы также можете добавить -xdev , если ниже есть другая файловая система.

4
06.03.2018, 13:52
5 ответов

Puedes hacerlo como:

sed -e '/^nnn/!b' -e '/.\{26\}/d'

o:

sed '/^nnn/{/.\{26\}/d;}'
6
27.01.2020, 20:44

Con grep

grep -v '^nnn.\{23\}' infile
2
27.01.2020, 20:44

¿Qué tal humildegrep

$ grep -v '^nnn.\{23\}' ip.txt
nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

$ # if ERE is available
$ grep -vE '^nnn.{23}' ip.txt
nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

-v, --invert-match Invert the sense of matching, to select non-matching lines.

2
27.01.2020, 20:44

Лучше всего это сделатьawk:

awk '/^nnn/ && length >= 25 { next } { print }' file

/^nnn/будет соответствовать заданному регулярному выражению ("строка начинается с nnn" ).length(илиlength($0))вернет длину входной строки. Если выражение совпадает и длина равна 25 или больше, строка игнорируется, в противном случае она печатается. { print }можно заменить просто 1, если набирать текст слишком долго.

Или,

awk '!/^nnn/ || length < 25' file

Это делает то же самое, но с обратным условием. Если строка не соответствует выражению или ее длина меньше 25 символов, то она печатается. Другие строки игнорируются.

Оба они производят

nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

для заданных входных данных.

8
27.01.2020, 20:44

sedраствор:

sed -E '/^nnn.{23}/d' file
  • /^nnn.{23,}/-соответствует только строке, которая начинается с nnnи содержит более 25 символов(.{23,}-соответствует последовательности символов длиной не менее 23 символов)
  • d-удалить совпавшую строку

Выход:

nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

То же с командойawk:

awk '!/^nnn.{23}/' file
6
27.01.2020, 20:44

Теги

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