Удаление нежелательных строк в текстовом файле

Это могло бы быть gksu "exo-open --launch TerminalEmulator" использовать gksu получить корневой доступ с графическим программным обеспечением. попробовать gksu gedit или gksu mousepad видеть то, что я имею в виду.

4
30.07.2013, 15:28
4 ответа

Просто:

sed 'n;d' file

даже для строк, и

sed '1!n;d' file

для нечетных строк.

С реализацией GNU sed, можно также использовать этот синтаксис:

Нечетный:

sed '1~2d' file

Даже:

sed '2~2d' file
6
27.01.2020, 20:51
  • 1
    Спасибо за разъяснение по поводу GNU определенный sed синтаксис, и также для введения 1! оператор Stephane :) –  Drav Sloan 30.07.2013, 19:18
  • 2
    "1" является ограничением адреса. Я думаю"!" оператор здесь инвертирует "n". (Не переходите к следующей строке; удалите этого.) –  Mike Sherrill 'Cat Recall' 30.07.2013, 21:50

Можно удалить, сказал что строки ненужного текста подобным так

sed -i '/[REGEX]/d' <FILE> 

Где [REGEX] регулярное выражение, которое соответствует нежелательной строке текста, и <FILE> название файла, из которого Вы хотите удалить текст. Можно вложить, удаляют (//d) команды как так:

sed '/[REGEX]/d ; /[REGEX]/d ; /[REGEX]/d'

Вот пример:

echo "a" > file ; echo "abcd" >> file 
sed -i '/^a$/d' file
cat file # => abcd

Если Ваша версия sed не поддерживает -i опция, можно использовать для следующего к тому же эффекту.

cat file | sed '/[REGEX]/d' > file_2 && cat file_2 > file && rm file_2



Умный с полуслова понимает

Перенаправление вывода cat file назад в file не будет иметь желаемого эффекта. Это будет на самом деле, усеченный file полностью это - это, полностью сотрется file.

Не делайте этого:

cat file | sed '/[REGEX]/d' > file
2
27.01.2020, 20:51
  • 1
    При использовании довольно недавнего GNU sed, можно избежать перенаправления, кошки и комнаты с sed -i '/[REGEX]/d' file. То решение также полагается на ровное соответствие строк [REGEX]. –  Drav Sloan 30.07.2013, 13:00
  • 2
    @DravSloan, довольно недавний, является 2002 здесь (sed 3.95). –  Stéphane Chazelas 30.07.2013, 15:11

Вот решение:

для удаления нечетной линии:

awk 'NR%2==0{ print $0 > "infile" }' infile

для удаления даже линий:

awk 'NR%2{ print $0 > "infile" }' infile

Обратите внимание, что выше команды удаляют связанные строки In-Place из Inflile Входной файл, поэтому будьте осторожны, вы записываете вывод в тот же файл ввода.

Вы можете написать их в другой отдельный файл, например, в качестве следующего:

Это создаст файл Evenlines , содержит равномерное количество строк:

awk 'NR%2==0{ print $0 > "EvenLines" }' infile

, и этот создаст Ondlines Файл содержит нечетное количество линий:

awk 'NR%2{ print $0 > "OddLines" }' infile
0
27.01.2020, 20:51

sed '0~2d' file

Эта команда используется для удаления четных строк в файлах.

-1
27.01.2020, 20:51

Теги

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