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

を使用して、これを行う1つの方法を次に示しawkます。(レコード区切り文字)を空の文字列に設定すると、空白行(つまり、2つの連続した行)をレコード区切り文字として扱うようにRS指示されます。空白の代わりにフィールド区切り文字として使用するように設定します。(空の文字列に設定すると、フィールド区切り文字としても使用されますが、他の空白が認識されないようにします。)最後に、(出力フィールド区切り文字)を行間に必要な文字列に設定します(引用符を閉じる、プラス、改行、22スペース、開始引用符)および空の文字列への設定(出力レコード区切り文字)により、最後に改行が書き込まれなくなります。awk\nFS\nawk\nRS\nOFSORSawk

foldは行をsedではなく55バイトのチャンクに分割するために使用します。これは、一部は整理されているように見えるためです。また、一部とは異なり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
于 2012-09-17T03:10:45.883 に答える