С sed
вам также не нужен внешний контур:
sed -E '$!N;s/(.*)\n(.*)/"\2" "\1"/' file
-E
заключается в использовании расширенного регулярного выражения, что облегчает чтение ()
$!N
всегда соединяет(N
)две строки в пространстве шаблона, кроме последней строки ($!
), если должна быть непарная строка s/(.*)\n(.*)/"\2" "\1"/
переворачивает обе строки, заменяет новую строку пробелом и добавляет двойные кавычки По умолчанию sed
использует базовые регулярные выражения POSIX и не понимает \s
, \w
или даже {}
. Он также не знает, как сопоставить \n
, так как это конец строки. Портативный способ сделать это будет:
sed 's/^Document [a-zA-Z0-9-]\{25\}$/MYLINEBREAK/' file
Почти столь же переносимым является использование -E
для включения расширенных регулярных выражений:
sed -E 's/^Document\s[a-zA-Z0-9-]{25}$/MYLINEBREAK/' file
Что, по крайней мере, в GNUsed
(и в Linux )позволяет вам еще больше упростить почти до того, что было в начале:
sed -E 's/^Document\s\w{25}$/MYLINEBREAK/' file
См. Почему мое регулярное выражение работает в X, но не в Y? для более подробной информации о различных вариантах регулярных выражений.