Bash: добавить текст в строке с ^ M-загрязненными строками - PullRequest
0 голосов
/ 18 апреля 2019

Фокус этого вопроса немного сместился, реальная проблема решена в Edit 2 ниже.Проблема в начале:

Я хочу добавить простую строку, например букву N, ко всем строкам в моем файле.Это должно произойти без введения разрывов строк.То, что мне нужно, выглядит следующим образом:

file     result
Aa       AaN
Bb       BbN
C        CN
Dd       DdN

Единственное, что я нашел до сих пор, это

sed -e 's/../&N/'

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

AaN
BbN
C
N
DdN

Самый простой аналог -

sed -e 's/^/&N/' file

, который предшествует каждой строке.Поэтому мне нужен обратный параметр ^, который позволяет мне добавлять каждую строку, независимо от того, как долго строка находится в этой строке.Другие вопросы, которые я нашел по поводу добавления, вводят несколько других ограничений, которые здесь не применяются.


Редактировать: Предлагаемый

sed 's/$/N/' file > file2

меняет только самую последнюю строку в моем файле., А мне нужно изменение в каждой строке.Кажется, работает в связанном вопросе, но здесь это не так.Я не знаю почему.


Редактировать 2:

Как указывал RavinderSingh13, мой список, полученный другими командами, содержал ^M символов.Таким образом, с помощью

cat -v file

был обнаружен реальный контент:

Aa^M
Bb^M
C^M
Dd^M

Представленное решение смогло решить эту проблему!

Ответы [ 3 ]

1 голос
/ 19 апреля 2019

Все, что вам нужно, это:

sed 's/\r*$/N/'

Взгляд:

$ cat -v file
Aa^M
Bb^M
C^M
Dd^M

$ sed 's/\r*$/N/' file | cat -v
AaN
BbN
CN
DdN
1 голос
/ 18 апреля 2019

Если вы согласны с awk, вы можете просто использовать print вместо замены.

awk '{gsub(/\r/,"");print $0"N"}'  Input_file

В случае, если вы хотите сделать для определенного поля порок, попробуйте: (на примере, где 1-е поле должно быть добавлено с N здесь):

awk '{gsub(/\r/,"");$1=$1"N"} 1'  Input_file
0 голосов
/ 25 апреля 2019

без -i опция для изменения файла, пробовал на gnu sed:

sed -E 's/$/N/' file
...