2011-05-18 123 views
5

我试图用生成的密钥生成一个txt文件到1行。例如:如何将多行文本转换为一行?

<----- key start -----> 
lkdjasdjskdjaskdjasdkj 
skdhfjlkdfjlkdsfjsdlfk 
kldshfjlsdhjfksdhfksdj 
jdhsfkjsdhfksdjfhskdfh 
jhdfkjsdhfkjsdhfkjsdhf 
<----- key stop -----> 

我希望它看起来像:

lkdjasdjskdjaskdjasdkjskdhfjlkdfjlkdsfjsdlfkkldshfjlsdhjfksdhfksdjjdhsfkjsdhfksdjfhskdfhjhdfkjsdhfkjsdhfkjsdhf 

通知我也想<----- key start -----><----- key stop ----->删除线。我怎样才能做到这一点?这是通过sed完成的吗?

回答

7
+1

即时通讯也试图删除行<----- key start ----->和<----- key stop ----->这就是为什么我认为sed会更好地工作.. – john 2011-05-18 20:47:06

+0

现在无法访问控制台。然而我发现这个http://www.linuxquestions.org/questions/programming-9/delete-first-and-last-lines-of-a-file-586069/对不起,没有看到最后一行。 – Luke 2011-05-18 20:54:54

0

一个简单的方法是使用cat file.txt | tr -d '\n'

+0

即时通讯也试图删除行<----- key start ----->和<----- key stop ----->这就是为什么我认为sed会更好。 – john 2011-05-18 20:48:06

1
grep '^[^<]' test.txt | tr -d '\n' 
4

如果你正在寻找你要的一切一个sed的,我有这个...

sed -n '1h;2,$H;${g;s/\n//g;s/<----- key \(start\|stop\) ----->//g;p}' key.txt

但它不完全容易理解:)如果您不介意输入几个命令,则可以在其他答案中使用管道grep,tr,sed等建议。

0
grep -v -e "key start" -e "key stop" /PATH_TO/key | tr -d '\n' 
1
awk '/ key (start|stop)/{next} {printf("%s", $0)} END {print ""}' filename 
0

您可以使用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 
3

要多线输出转换为分离线空单,使用

tr '\n' ' ' < key.txt 

我知道这没有回答详细的问题。但这是标题的一个可能的答案。我需要这个答案,我的谷歌搜索发现这个问题。

0

这可能为你工作(GNU SED):

sed -r '/key start/{:a;N;/key stop/!ba;s/^[^\n]*\n(.*)\n.*/\1/;s/\n//g}' file 

收集起来key startkey stop之间的线路。然后删除第一行和最后一行并删除任何换行符。