Использование инструментов оболочки для извлечения части файла - PullRequest
3 голосов
/ 25 мая 2010

У меня есть текстовый файл, и я хочу извлечь каждую строку над! --- комментарием ---! в новый файл, не на основе номеров строк (но проверка на комментарий). Как бы я это сделал?

test123
bob
ted
mouse
qwerty
!--- comment ---!
123456
098786

Ответы [ 4 ]

1 голос
/ 25 мая 2010

Для файлов не имеет значения, если ваша программа sed останавливается рано; для ввода по каналу некоторые программы расстраиваются, если вы останавливаетесь рано. Для тех, кого вы должны удалить из комментария и далее:

sed '/^!--- comment ---!$/,$d' somefile.txt

Если вы действительно должны использовать bash, а не инструменты оболочки, такие как sed, то:

x=1
while read line
do
    if [ "$line" = "!--- comment ---!" ]
    then x=0    # Or break
    elif [ $x = 1 ]
    then echo "$line"
    fi
done < somefile.txt

Этот код также будет работать с оболочками Bourne и Korn, и я ожидаю, что он будет работать практически с любой оболочкой, унаследованной от оболочки Bourne (например, с любой POSIX-совместимой оболочкой).

1 голос
/ 25 мая 2010

Используйте sed или while loop :

while read line
do
    if [[ $line = '!--- comment ---!' ]];
    then
        break;
    else
        echo $line;
    fi;
done < input.txt > output.txt
1 голос
/ 25 мая 2010
sed -n '/^!--- comment ---!$/q;p' somefile.txt
0 голосов
/ 25 мая 2010
awk '/!--- comment ---!/ {exit} 1' somefile.txt

Если комментарий является переменным:

awk -v comment="$comment_goes_here" '$0 ~ comment {exit} 1' somefile.txt

Завершающий 1 инструктирует awk просто использовать действие по умолчанию (print) для всех строк, которые не соответствуют другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...