Я думаю, в первом случае \
перед новой строкой заставляет строку продолжаться или что-то в этом роде.
Это должно работать:
a='C-\'
bind -n $a display-message 'hello'
Использование 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
для изменения места -в файлах.
Я смог достичь своей цели с помощью vi.
vi -c '%s/\n\n/\n/ | wq' sample.txt
sed
по умолчанию использует новые строки в качестве разделителей. Однако вы можете просто использовать NUL
в качестве разделителей, а затем легко воздействовать на\n\n
:
sed -z 's/\n\n/ /g'
Обратите внимание, что g
необходим, так как теперь вы работаете с псевдо -одной строкой (нулем -с разделителями ), которая может иметь несколько\n\n
-случаев.
Это может сделать GoCSV.
Я начинаю с файлов 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 |
+--------+--------+----------+--------+--------+
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