Я застрял - отправляю текстовый файл следующим образом:
cat file1.txt | sed '/^[0-9 visible.*[0-9 ]$/d'> file2.txt
Это регулярное выражение перехватывает строки в текстовом редакторе, и оно работает, когда я использую его для удаления всех пустых строк в тот же файл, поэтому я думаю, нет проблем с форматом новой строки (Linux / Windows).
Интересно, почему это не удаляет эти строки, или как это можно сделать иначе?
Дополнительные примечания:
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>
— последовательность байтов, которые не образуют допустимый символ в текущей локали. Но в любом случае, вы не можете ожидать много переносимости для такого типа строки, которая не является допустимым текстом.