linux - 如何从命令行中删除流中的最后一行

标签 linux bash sed newline

我有这样的命令行:

xclip -o -sel clip | sed -e 's/^ *"\(.*\)"+\?/\1/g' | tr -d '\n' |
    sed -e 's/.\{,55\}/"&"+\n/g' |
    sed -e "2,$ s/^/$(seq 22 | xargs -I{} echo -n ' ')/" |
    sed -e '$ s/+$//' | xclip -sel clip

源代码中的格式字符串(我用它来格式化 javascript 文件中的长字符串 - 55 和 22 是硬编码宽度和缩进)

var foo = "Lorem ipsum dolor sit amet, consectetur adipiscing elit"+
          ". Nulla sed dolor nisl, in suscipit justo. Donec a enim"+
          " et est porttitor semper at vitae augue. Proin at nulla"+
          " at dui mattis mattis. Nam a volutpat ante. Aliquam con"+
          "sequat dui eu sem convallis ullamcorper."

但是当我在括号内复制过去的代码时 var foo = foo.bar() 我明白了

var foo = foo.bar("Lorem ipsum dolor sit amet, consectetur adipiscing elit"+
                  ". Nulla sed dolor nisl, in suscipit justo. Donec a enim"+
                  " et est porttitor semper at vitae augue. Proin at nulla"+
                  " at dui mattis mattis. Nam a volutpat ante. Aliquam con"+
                  "sequat dui eu sem convallis ullamcorper."
)

最后一个引号后的新行,没什么大不了的,但有人知道我怎样才能删除最后一个新行吗?

最佳答案

这是一种方法,使用 awk。将 RS(记录分隔符)设置为空字符串告诉 awk 将空行(即两个连续的 \n)视为记录分隔符。将 FS 设置为 \n 会导致 awk\n 作为字段分隔符而不是空格。 (将 RS 设置为空字符串也会导致 \n 被用作字段分隔符,但我们希望避免识别其他空格。)最后,我们设置 OFS(输出字段分隔符)是我们想要的行间字符串(结束引号、加号、换行符、22 个空格、开始引号)并将 ORS(输出记录分隔符)设置为空字符串导致 awk 不在末尾写入任何换行符。

我使用 fold 将行拆分为 55 字节的 block 而不是 sed,部分原因是它看起来更整洁,部分原因是,与 sed 不同,它不会如果没有开始的话,在输入的末尾添加一个新行。

看似多余的$1=$1导致awk重新创建$0,起到了使用OFS的作用作为字段之间的输出字段分隔符。否则,它仅用于分隔单独的打印参数。

第一行和最后一行与 OP 相同。

xclip -o -sel clip | sed -e 's/^ *"\(.*\)"+\?/\1/g' | tr -d '\n' |
fold -b -w55 |
awk -vFS=$'\n' -vOFS="$(printf '"+\n%22s"' '')" \
    -vRS='' -vORS='' \
    '{$1=$1; print "\"" $0 "\""}' |
xclip -sel clip

关于linux - 如何从命令行中删除流中的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452043/

相关文章:

linux - 从 cvs 中删除具有特定模式的文件

sed 或 perl + 在两行之间插入文本

php - mysql运行正常吗?

arrays - 从 bash 中的多个数组中的相同数据位置提取

linux - 通过 ssh 使用 git 不会获取私钥

regex - 匹配后如何停止grep

linux - 我如何使用 GNU-utils 来过滤这样的文本?

bash - 用于计算数据文件中数字列表平均值的脚本

linux - 如何在 *nix shell 中一次使用一个参数执行命令?

linux - 如何获取 perf stat 列出所有可能的事件