在Bash中将换行符替换为双引号包裹空格的最简方法是什么?
问题原因说明
tr 是单字符映射替换工具,仅支持单个字符的一一对应替换,无法实现「将单个换行符替换为" "多字符字符串」的需求,因此你之前的尝试无法生效。
解决方案
方案1:sed + tr 组合(从根源避免缺引号问题)
你可以先给每行内容包裹双引号,再替换换行符为空格,完全不会出现开头缺引号的问题:
sed 's/^ *//; s/.*/"&"/' FILE.txt | tr '\n' ' '
- 第一步
sed 's/^ *//; s/.*/"&"/':先删除每行开头的空白字符,再给每行内容前后包裹双引号 - 第二步
tr '\n' ' ':将所有换行符替换为空格,最终输出即为你需要的格式
方案2:awk 一步完成
awk '{gsub(/^ */,"",$0); printf "\"%s\" ", $0}' FILE.txt
如果需要去掉末尾多余的空格,可以再加一步管道:
awk '{gsub(/^ */,"",$0); printf "\"%s\" ", $0}' FILE.txt | sed 's/ $//'
补开头双引号的单独解决方法
如果你坚持先替换换行再补引号,只需要用sed在输出开头插入双引号即可:
# 把前面的命令输出管道到下面的命令即可补开头引号 [你的原有命令输出] | sed '1s/^/"/'
内容的提问来源于stack exchange,提问作者I.P
相关产品推荐
相关产品推荐

