0

我有这个命令行:

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."
)

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

4

1 回答 1

3

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

fold习惯将行拆分为 55 字节的块而不是 sed,部分原因是它看起来更整洁,部分原因是,sed与.

看似多余的$1=$1原因awkrecreate $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
于 2012-09-17T03:10:45.883 回答