Заменитеn на новую строку в awk

Вопрос:Я обрабатываю журналы, и они выводят n вместо строк новой строки. Мне показалось, что я передам tail в awk и сделаю простую замену, однако я не могу убежать от новой строки в регулярном выражении. Здесь я демонстрирую свою проблему с cat вместо tail: // test.txt JohnnDoe SaranConnor cat test.txt | awk -F'n' '{ print $1

Вопрос:

Я обрабатываю журналы, и они выводят n вместо строк новой строки.

Мне показалось, что я передам tail в awk и сделаю простую замену, однако я не могу убежать от новой строки в регулярном выражении. Здесь я демонстрирую свою проблему с cat вместо tail:

// test.txt JohnnDoe SaranConnor cat test.txt | awk -F’\n’ ‘{ print $1 «n» $2 }’

Требуемый вывод:

John Doe Sara Connor

Фактический выход:

JohnnDoe <- there is a newline here SaranConnor <- there is a newline here

Итак, похоже, что \n не соответствует n между первым и последним именем в test.txt, но вместо этого используется новая строка в конце каждой строки.

Похоже, что \n не является правильным способом экранирования в терминале справа? Этот способ экранирования работает нормально, например. Возвышенный текст:

Лучший ответ:

Как насчет этого?

$ cat file JohnnDoe SaranConnor $ awk ‘{gsub(/\n/,»n»)}1’ file John Doe Sara Connor Ответ №1

Это будет работать с любым sed в любой системе, так как это переносимый способ использования новых строк в sed:

$ sed ‘s/\n/ /’ file John Doe Sara Connor

Если вы можете ввести строку типа foo\nbar, а \ – это экранированная обратная косая черта, вы не сможете использовать простой подстановочный подход, как вы просили.

Ответ №2

Использование GNU sed, решение довольно просто, поскольку уже был дан ответ на вопрос @hek2mgl (и что IMHO – это то, как он должен работать повсюду, но, к сожалению, этого не делает).

Но это немного сложно, когда делаете это на Mac OS X и других * BSD UNIXes.

Лучший способ выглядит следующим образом:

sed ‘s/\n/’$’n»/g’ <<< ‘ABCn123’

Тогда, конечно, все еще AWK, @AvinashRaj имеет правильный ответ, если вы хотите его использовать.

Ответ №3

Зачем использовать для этого awk или sed? Используйте perl!

perl -pe ‘s/\n/n/g’ file

Используя perl, вы избегаете думать о соблюдении posix, и он обычно дает лучшую производительность, и он будет согласован на всех (большинстве) платформах.

Ответ №4

Я бы использовал sed:

sed ‘s/\n/n/g’ file

Оцените статью
Добавить комментарий