Можно сделать это как это в сценарии оболочки:
f=piRNA.txt
g=${f%.txt}
Выполнение
echo $f $g
урожаи после вывода:
piRNA.txt piRNA
С этим %
синтаксис Вы удаляете шаблон суффикса соответствия. Суффиксный шаблон в примере .txt
и f
переменная, из которой это удалено. Обратите внимание, что шаблон может также содержать подстановочные знаки (cf., например, руководство удара для деталей).
Как всегда, в случае, если Ваши имена файлов могут содержать пробелы, необходимо поместить ссылки переменных в двойные кавычки (например. "$f"
и т.д.).
Так как у вас уже есть ваш портативный 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 является историческим и не должен использоваться для новых скриптов.
.sed 's/\\n/\
/g'
Обратите внимание на обратную косую черту непосредственно перед тем, как нажать return в строке замены.
Если H
старое пространство пустое, вы также можете сделать:
sed '/\\n/G;s/\\n\(.*\)\(.\)/\2\1/;P;D'
... но ответ uxnut уже и быстрее, и проще, так что вы можете взять его, как вам будет угодно.
Другая посторонняя возможность:
INPUT | sed -n l | while read v ; do printf "${v%?}" ; done
Но будьте осторожны, ^ что переводит все стандартные C-стили \
обратные косынки - как \b
ackspace и \r
eturn и \00
окталы и что вы делаете.
Вам требуется решение в sed, и это уже приведено ниже. Но я хотел добавить еще одну возможность, что IMHO просто легче и быстрее,
tr -d "\n"
С gnu sed
также работает следующее:
gsed -n -e 'H;${x;s/\\n/\n/g;p;}'