如何使用 Bash 删除行首的换行符和字符?

How to delete newline and character at the start of line using Bash?

我需要删除行首有确切字符的换行符。

例如,我有 new.txt 文件,其中包含以下行:

"AAA"AAA
"BBB
"""BBB
"CCC"CCC

预期结果是:

"AAA"AAA
"BBB"BBB
"CCC"CCC

我尝试使用 sed 但它不起作用。

sed -i -e 's/\n"""/"/g' new.txt

请帮我解决这个问题。

使用 Perl。

perl -i -0777pe 's/\n"""/"/' new.txt

输出到new.txt

"AAA"AAA
"BBB"BBB
"CCC"CCC

tr代替\r\n。使用 sed 命令,然后将 \r\n 替换回去。 \r 因为你的文件有 Windows 行结尾。

tr '\r' '\t' < new.txt | tr '\n' '\f' | sed -e 's/\t\f"""/"/' | tr '\f' '\n' | tr '\t' '\r'

这可能对你有用 (GNU sed):

sed 'N;s/\n"""/"/;P;D' file

将下一行追加到当前行。如果模式 space 现在包含 \n""" 将其替换为 " 然后 print/delete 模式 space 中的第一行并重复。

使用 GNU sed:

$ cat new.txt
"AAA"AAA
"BBB
"""BBB
"CCC"CCC

$ sed ':x;N;s/\n""//;bx' new.txt
"AAA"AAA
"BBB"BBB
"CCC"CCC

GNU - sed manual - joining lines

T.