Удалить строки, начинающиеся и заканчивающиеся цифрой

Я застрял - отправляю текстовый файл следующим образом:

cat file1.txt | sed '/^[0-9 visible.*[0-9 ]$/d'> file2.txt

Это регулярное выражение перехватывает строки в текстовом редакторе, и оно работает, когда я использую его для удаления всех пустых строк в тот же файл, поэтому я думаю, нет проблем с форматом новой строки (Linux / Windows).

Интересно, почему это не удаляет эти строки, или как это можно сделать иначе?

0
13.04.2019, 18:18
1 ответ

Дополнительные примечания:

sed '/^[0-9].*[0-9]$/d'

Не удалось удалить строки, содержащие одну цифру (, даже если они начинаются и заканчиваются цифрой ).

Также обратите внимание, что во многих локалях [0-9]соответствует большему количеству цифр, чем 0123456789. Если вы хотите сопоставить только их, вам понадобится [0123456789]или [[:digit:]].

Более очевидная команда для фильтрации строк на основе шаблона — grep.

cat— это команда конкатенации. Нет смысла объединять один файл.

Здесь, чтобы решить все эти проблемы и игнорировать любые начальные или конечные символы пробела (, такие как возврат каретки в конце MS -DOS в вашем вводе ), вы можете сделать:

<file.txt.in grep -e '^[[:space:]]*[^[:digit:][:space:]]' \
                  -e '[^[:digit:][:space:]][[:space:]]*$' \
                  -e '^[[:space:]]*$' > file.txt.out

(, то есть возвращают строки, которые начинаются или заканчиваются не -цифрой (за начальным пробелом, или перед конечным пробелом ), или полностью пробельные.

или:

<file.txt.in grep -vx '[[:space:]]*[[:digit:]]\(.*[[:digit:]]\)\{0,1\}[[:space:]]*' > file.txt.out

Или то же самое с ЭРЭ:

<file.txt.in grep -vxE '[[:space:]]*[[:digit:]](.*[[:digit:]])?[[:space:]]*' > file.txt.out

То есть, отфильтровать из(с помощью-v)строк, начинающихся с цифры, за которой необязательно следует оставшаяся строка, заканчивающаяся цифрой, допуская пробелы в начале и ned.

Тем не менее, они могут не удалить такие строки, как 8xx<non-character>yy8, где <non-character>— последовательность байтов, которые не образуют допустимый символ в текущей локали. Но в любом случае, вы не можете ожидать много переносимости для такого типа строки, которая не является допустимым текстом.

1
28.01.2020, 02:49

Теги

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