首页 > 解决方案 > 仅当上一行以反斜杠结尾时,如何将多行合并为一行?

问题描述

我有以下文件:

Hi
How \
are \ 
you\
?

Bye

我想得到这个输出:

Hi
How are you?

Bye

我怎样才能做到这一点?

标签: bashawksedline

解决方案


如果省略其选项标志,则在转义换行符上加入行\正是 shell 命令将执行的操作。read-r

因此,这是一个读取read不带-r标志的输入文件并打印结果的示例:

input.txt

Hi
How \
are \
you\
?

Bye
#!/usr/bin/env sh

# shellcheck disable=SC2162 # Explicitly desired backslash escaping
while IFS= read line || [ -n "$line" ]; do
  printf %s\\n "$line"
done <input.txt

实际打印结果:

Hi
How are you?

Bye

Bash 的help read摘录:

-r不允许反斜杠转义任何字符

SshellCheck SC2162:不带 -r 读取会破坏反斜杠


推荐阅读