Замените \n новой строкой в sed портативно

Можно сделать это как это в сценарии оболочки:

f=piRNA.txt
g=${f%.txt}

Выполнение

 echo $f $g

урожаи после вывода:

piRNA.txt piRNA

С этим % синтаксис Вы удаляете шаблон суффикса соответствия. Суффиксный шаблон в примере .txt и f переменная, из которой это удалено. Обратите внимание, что шаблон может также содержать подстановочные знаки (cf., например, руководство удара для деталей).

Как всегда, в случае, если Ваши имена файлов могут содержать пробелы, необходимо поместить ссылки переменных в двойные кавычки (например. "$f" и т.д.).

24
05.07.2014, 13:42
5 ответов

Так как у вас уже есть ваш портативный sed ответ, я просто упомяну, что sed редко является лучшим инструментом, если вам нужно как-то манипулировать новыми строками. Perl очень близок к портативному, как sed, устанавливается по умолчанию на большинстве *nix систем и легко справляется с этим:

printf '%s\n' 'aa\nbb' | perl -pe 's/\\n/\n/g'

Другой очень портативный выбор - это awk:

printf '%s\n' 'aa\nbb' | awk  '{gsub("\\\\n","\n")};1'

На Solaris, не забудьте использовать стандартный awk в /usr/xpg4/bin, тот, который в /bin является историческим и не должен использоваться для новых скриптов.

.
9
27.01.2020, 19:41
sed 's/\\n/\
/g'

Обратите внимание на обратную косую черту непосредственно перед тем, как нажать return в строке замены.

32
27.01.2020, 19:41

Если H старое пространство пустое, вы также можете сделать:

sed '/\\n/G;s/\\n\(.*\)\(.\)/\2\1/;P;D'

... но ответ uxnut уже и быстрее, и проще, так что вы можете взять его, как вам будет угодно.

Другая посторонняя возможность:

INPUT | sed -n l | while read v ; do printf "${v%?}" ; done

Но будьте осторожны, ^ что переводит все стандартные C-стили \обратные косынки - как \backspace и \return и \00окталы и что вы делаете.

1
27.01.2020, 19:41

Вам требуется решение в sed, и это уже приведено ниже. Но я хотел добавить еще одну возможность, что IMHO просто легче и быстрее,

tr -d "\n"
-2
27.01.2020, 19:41

С gnu sedтакже работает следующее:

gsed -n -e 'H;${x;s/\\n/\n/g;p;}'
1
27.01.2020, 19:41

Теги

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