Как удалить \n в строке

Я думаю, в первом случае \перед новой строкой заставляет строку продолжаться или что-то в этом роде.

Это должно работать:

a='C-\'
bind -n $a display-message 'hello'
5
07.06.2021, 23:00
5 ответов

Пробовали ли вы использовать:sed ':a;N;$!ba;s/\\n\n/ /g' file.txt?

Я нашел этот ответ, в котором подробно описано, как удалить новую строку с помощью sed, и просто добавил \\nперед этим с дополнительной обратной косой чертой, чтобы избежать специального символа.

0
28.07.2021, 11:26

Использование Miller и предоставление вашему фрагменту правильного заголовка TSV:

$ printf '%b\n' 'foo\tbar\tbaz' '\t"ABC\n\n123"\t'
foo     bar     baz
        "ABC

123"

, затем

$ printf '%b\n' 'foo\tbar\tbaz' '\t"ABC\n\n123"\t' | 
    mlr --tsv put -S 'for(k,v in $*){$[k] = sub(v,"\n+"," ")}'
foo     bar     baz
        ABC 123

или (преобразование вывода в CSV, чтобы сделать разделение полей менее неоднозначным)

$ printf '%b\n' 'foo\tbar\tbaz' '\t"ABC\n\n123"\t' | 
    mlr --itsv --ocsv put -S 'for(k,v in $*){$[k] = sub(v,"\n+"," ")}'
foo,bar,baz
,ABC 123,

У Миллера есть переключатель -Iдля изменения места -в файлах.

0
28.07.2021, 11:26

Я смог достичь своей цели с помощью vi.

vi -c '%s/\n\n/\n/ | wq' sample.txt
-1
28.07.2021, 11:26

sed по умолчанию использует новые строки в качестве разделителей. Однако вы можете просто использовать NULв качестве разделителей, а затем легко воздействовать на\n\n:

sed -z 's/\n\n/ /g'

Обратите внимание, что gнеобходим, так как теперь вы работаете с псевдо -одной строкой (нулем -с разделителями ), которая может иметь несколько\n\n-случаев.

0
28.07.2021, 11:26

Это может сделать GoCSV.

Преобразовать TSV в CSV и заменить символы новой строки

Я начинаю с файлов TSV, которые выглядят так, пытаясь смоделировать ваши данные:

+--------+--------+--------+--------+--------+
| Col21  | Col22  | DESCR2 | Col24  | Col25  |
+--------+--------+--------+--------+--------+
| data21 | data22 | ABC    | data24 | data25 |
|        |        |        |        |        |
|        |        | 123    |        |        |
+--------+--------+--------+--------+--------+

Первым шагом является преобразование TSV в CSV, в котором работают все команды GoCSV. Я также добавляю в конце новый столбец со значениями DESC2 с заменой новых строк.-n имя нового столбца,-t — шаблон SPRIG , который имеет нужную нам функцию replace(.DESCR2 | replaceчитается как «перевести столбец DESCR2 в функцию замены»):

gocsv delim   \
    -i "\t"   \
    -o ","    \
    input.tsv | 
  gocsv add                               \
    -n DESCR2_replaced                    \
    -t '{{.DESCR2 | replace "\n" " " }}' \
  > replaced.csv

replace.csv

+--------+--------+--------+--------+--------+-----------------+
| Col21  | Col22  | DESCR2 | Col24  | Col25  | DESCR2_replaced |
+--------+--------+--------+--------+--------+-----------------+
| data21 | data22 | ABC    | data24 | data25 | ABC  123        |
|        |        |        |        |        |                 |
|        |        | 123    |        |        |                 |
+--------+--------+--------+--------+--------+-----------------+

Поменять местами -в новом столбце и переименовать в старый столбец

С данными, нормализованными в заменяемом столбце _, я собираюсь «выбрать из» старого DESCR2 и «выбрать в» новый DESCR2 _, замененный на его место; затем переименовать DESCR2 _заменить обратно на DESCR2. В моем примере у меня только 6 столбцов, поэтому индексы-cстолбца отличаются от индексов в вашем файле с 23+ столбцами (s):

gocsv select     \
    -c 1-2,6,4-5 \
    replaced.csv |
  gocsv rename    \
    -c 3          \
    -names DESCR2 \
  > final.csv

final.csv

+--------+--------+----------+--------+--------+
| Col21  | Col22  | DESCR2   | Col24  | Col25  |
+--------+--------+----------+--------+--------+
| data21 | data22 | ABC  123 | data24 | data25 |
+--------+--------+----------+--------+--------+

Преобразовать обратно в TSV

gocsv delim   \
    -i ","    \
    -o "\t"   \
    final.csv \
  > final.tsv

Один большой трубопровод

gocsv delim                                \
    -i "\t"                                \
    -o ","                                 \
    input.tsv                              \
| gocsv add                                \
    -n DESCR2_replaced                     \
    -t '{{.DESCR2 | replace "\n" " " }}'  \
| gocsv select                             \
    -c 1-2,6,4-5                           \
| gocsv rename                             \
    -c 3                                   \
    -names DESCR2                          \
| gocsv delim                              \
    -i ","                                 \
    -o "\t"                                \
> final.tsv
0
28.07.2021, 11:26

Теги

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