生成されたキーを含むtxtファイルを1行にしようとしています。例:
<----- key start ----->
lkdjasdjskdjaskdjasdkj
skdhfjlkdfjlkdsfjsdlfk
kldshfjlsdhjfksdhfksdj
jdhsfkjsdhfksdjfhskdfh
jhdfkjsdhfkjsdhfkjsdhf
<----- key stop ----->
私はそれを次のように見せたい:
lkdjasdjskdjaskdjasdkjskdhfjlkdfjlkdsfjsdlfkkldshfjlsdhjfksdhfksdjjdhsfkjsdhfksdjfhskdfhjhdfkjsdhfkjsdhfkjsdhf
<----- key start ----->
と<----- key stop ----->
の行も削除したいことに注意してください。これどうやってするの?これはsed
で行われますか?
あなたが1つのsedであなたが求めたすべてを探しているなら、私はこれを持っています...
sed -n '1h;2,$H;${g;s/\n//g;s/<----- key \(start\|stop\) ----->//g;p}' key.txt
しかし、正確に読みやすいわけではありません:)いくつかのコマンドをパイプ処理してもかまわない場合は、残りの回答でパイプ接続されたgrep、tr、sedなどの提案を使用できます。
複数行の出力を単一のスペースで区切られた行に変換するには、
tr '\n' ' ' < key.txt
私はこれが詳細な質問に答えないことを知っています。しかし、それはタイトルに対する1つの可能な答えです。私はこの答えが必要でした、そして私のグーグル検索はこの質問を見つけました。
grep '^[^<]' test.txt | tr -d '\n'
awk '/ key (start|stop) / {next} {printf("%s", $0)} END {print ""}' filename
簡単な方法は、cat file.txt | tr -d '\n'
を使用することです。
tail -n +2 key.txt | head -n -1 | tr -d '\n'
テールで最初の行を削除し、headで最後の行を削除し、trで改行を削除します。
これはあなたのために働くかもしれません(GNU sed):
sed -r '/key start/{:a;N;/key stop/!ba;s/^[^\n]*\n(.*)\n.*/\1/;s/\n//g}' file
key start
とkey stop
の間の行を収集します。次に、最初と最後の行を削除し、改行を削除します。
grep -v -e "key start" -e "key stop" /PATH_TO/key | tr -d '\n'
man 1 ed
を使用して行を結合することもできます。
str='
aaaaa
<----- key start ----->
lkdjasdjskdjaskdjasdkj
skdhfjlkdfjlkdsfjsdlfk
kldshfjlsdhjfksdhfksdj
jdhsfkjsdhfksdjfhskdfh
jhdfkjsdhfkjsdhfkjsdhf
<----- key stop ----->
bbbbb
'
# for in-place file editing use "ed -s file" and replace ",p" with "w"
# cf. http://wiki.bash-hackers.org/howto/edit-ed
cat <<-'EOF' | sed -e 's/^ *//' -e 's/ *$//' | ed -s <(echo "$str")
H
/<----- key start ----->/+1,/<----- key stop ----->/-1j
/<----- key start ----->/d
/<----- key stop ----->/d
,p
q
EOF
# print the joined lines to stdout only
cat <<-'EOF' | sed -e 's/^ *//' -e 's/ *$//' | ed -s <(echo "$str")
H
/<----- key start ----->/+1,/<----- key stop ----->/-1jp
q
EOF
Vimでは、それはただ:%s/^ M //
私はこれを常に使用して、行からコンマ区切りのリストを生成します。 sedまたはawkについては、次のリンクで多くのソリューションを確認してください。
http://www.unix.com/Shell-programming-scripting/35107-remove-line-break.html
例:
貼り付け-s-d '、' tmpfile | sed's /、/、/ g '