Очистить содержимое определенных строк текстового файла без удаления возврата каретки - PullRequest
0 голосов
/ 19 октября 2019

У меня есть DOS-текстовый файл, из которого я хочу очистить все содержимое строк, начинающихся со знака фунта. Я хочу сохранить возврат каретки (CR) в каждой строке, которая не работает с кодом ниже.

Как я понимаю, с ". *" Считается любой символ, кроме новой строки (LF). Так же и CR, именно поэтому моя идея состоит в том, чтобы заменить строковый контент на CR.

Вот что у меня есть:

sed.exe -e "s/^#.*/ \r/g" %1 >> result.txt

То, что я ожидаю, это то, что, например,textfile:

hello you CRLF
#hello me CRLF
hello world CRLF

изменяется на

hello you CRLF
 CRLF
hello world CRLF

Но на самом деле результат

hello you CRLF
 rLF
hello world CRLF

Как сохранить CR в строках?

1 Ответ

1 голос
/ 19 октября 2019

Можете ли вы обработать awk?:

Проверить окончания строк исходного файла:

$ file file
file: ASCII text, with CRLF line terminators

The awk:

$ awk 'BEGIN{RS=ORS="\r\n"}{sub(/^\#.*/,"")}1' file > out

Посмотреть результат (0d 0a является CR LF):

$ hexdump -C out
00000000  68 65 6c 6c 6f 20 79 6f  75 0d 0a 0d 0a 68 65 6c  |hello you....hel|
00000010  6c 6f 20 77 6f 72 6c 64  0d 0a                    |lo world..|

Объяснено:

$ awk '
BEGIN {               # set the record separators to CR LF
    RS=ORS="\r\n"     # both, input and output
}
{
    sub(/^\#.*/,"")   # replace # starting records with ""
}1' file > out        # output and redirect it to a file
...