Создать файл с содержимым, в котором содержимое имеет новую строку

Para eliminar todas las líneas de un archivo que tienen caracteres de control:

grep -v '[[:cntrl:]]' file >file.modified

Esto creará un nuevo archivo llamado file.modified. El indicador -va grepinvierte el sentido de la coincidencia realizada por la utilidad y [[:cntrl:]]coincidirá con las líneas que contienen caracteres de control.

Para eliminar líneas que no tienen -caracteres imprimibles en la configuración regional C (, por ejemplo, caracteres Unicode):

LC_ALL=C grep -v '[^[:print:]]' file >file.modified
1
17.06.2019, 17:40
2 ответа

Использование оболочки bash:

while IFS= read -r line; do
    name=${line%%::*}
    contents=${line#*::}

    echo -e "$contents" >"$name"
done <fileA.txt

Это считывает входной файл построчно и извлекает имя выходного файла и содержимое из прочитанной строки, используя замену стандартных параметров . ${variable%%pattern}удаляет самую длинную совпадающую подстроку из конца $variable, которая соответствует pattern, а ${variable#pattern}удаляет самую короткую совпадающую подстроку из начала $variable, которая соответствует pattern.

Значение lineсчитывается с помощью read -r, так что обратная косая черта сохраняется в данных. Без -rreadне сохранили бы их. Мы также устанавливаем IFSв пустую строку перед вызовом read, чтобы из данных не удалялись фланкирующие пробелы.

Вывод выполняется с использованием echo -e, который интерпретирует escape-последовательности в данных. Это означает, что он заменит \nв данных фактическими символами новой строки.

После запуска у вас будет

$ ls -l
total 12
-rw-r--r--  1 kk  wheel  71 Jun 17 16:28 fileA.txt
-rw-r--r--  1 kk  wheel  24 Jun 17 16:31 trans_fileA
-rw-r--r--  1 kk  wheel  16 Jun 17 16:31 trans_fileB
$ cat trans_fileA
abcd
dfghc
091873
hhjj
$ cat trans_fileB
a11d
11hc
73345

Похожие:

2
27.01.2020, 23:30

Моя первая мысль была sed Учитывая ваш файл, fileA.txt выше:

abcd\ndfghc\n091873\nhhjj

и запуск sedпротив newline.sed, который содержит:

s/\\n/\
/g

таким образом

sed -f./newline.sed <./fileA.txt >./trans_fileA

вернет эти результаты вtrans_fileA:

abcd
dfghc
091873
hhjj

Это был самый простой способ выполнить вашу задачу.

ХТХ

0
27.01.2020, 23:30

Теги

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