我有命令行:
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."
)
最后一句话之后的新行,不是什么大不了的事,但有人知道如何删除最后一行?
答案 0 :(得分:3)
这是使用awk
执行此操作的一种方法。将RS
(记录分隔符)设置为空字符串会使awk
将空行(即两个连续的\n
)视为记录分隔符。将FS
设置为\n
会导致awk
将\n
作为字段分隔符而不是空格。 (将RS
设置为空字符串也会导致\n
用作字段分隔符,但我们希望避免识别其他空格。)最后,我们设置OFS
(输出字段分隔符) )成为我们想要的行之间的字符串(结束引号,加号,换行,22个空格,打开引号)并将ORS
(输出记录分隔符)设置为空字符串会导致awk
不写任何换行符最后。
我使用fold
将行分成55个字节的块而不是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