как tr (unix translate) обрабатывает ne строки? - PullRequest
0 голосов
/ 05 ноября 2018

Я замечаю поведение с концом строки '\ n', которого я не понимаю, и поэтому я предложил следующий «тест». Я на Mac OS X.

У меня есть файл с:

one two
three four five
six seven

Тогда я бегу

x=$(awk '{print}' filename.txt)

и

echo "$x"

печатает правильно (т.е. содержимое файла, как указано выше).

Однако, когда я делаю

y=$(echo $x | tr "\n" "N")

(я хочу перевести новую строку '\ n' в заглавную 'N', просто чтобы посмотреть, что произойдет), тогда я получу

one two three four five six sevenN

Кажется, что все вхождения '\ n', кроме последнего, обнаружены (поскольку вывод находится в одной строке), но не заменены на 'N', в то время как замена происходит для последнего экземпляра.

Последний символ (в конце файла) отличается от других символов новой строки?

Я не понимаю, что происходит.

EDIT

Я могу вспомнить одну разницу между последней строкой и другими. awk видит один символ новой строки \n в конце всех строк, кроме последней, и при печати добавляет еще одну такую ​​новую строку. Поэтому мне нужно заменить новую строку double на N.

С другой стороны, почему я не вижу два N с?

В конце последней строки есть только один '\ n', и он заменяется на N.

Это приближается к объяснению?

...