【问题标题】:How do I convert multi line text into one line?如何将多行文本转换为一行?
【发布时间】:2011-08-28 09:21:54
【问题描述】:

我正在尝试将带有生成密钥的 txt 文件放入 1 行。示例:

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

我希望它看起来像:

lkdjasdjskdjaskdjasdkjskdhfjlkdfjlkdsfjsdlfkkldshfjlsdhjfksdhfksdjjdhsfkjsdhfksdjfhskdfhjhdfkjsdhfkjsdhfkjsdhf

请注意,我还希望删除 &lt;----- key start -----&gt;&lt;----- key stop -----&gt; 行。我怎样才能做到这一点?这会用sed 完成吗?

【问题讨论】:

    标签: bash sed text-processing


    【解决方案1】:

    【讨论】:

    【解决方案2】:

    要将多行输出转换为单个空格分隔的行,请使用

    tr '\n' ' ' < key.txt
    

    我知道这并不能回答详细的问题。但这是标题的一种可能答案。我需要这个答案,我的谷歌搜索找到了这个问题。

    【讨论】:

      【解决方案3】:

      如果您在一个 sed 中寻找您所要求的一切,我有这个...

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

      但它不是很容易阅读 :) 如果您不介意管道传输几个命令,您可以在得到的其余答案中使用管道 grep、tr、sed 等建议。

      【讨论】:

        【解决方案4】:
        tail -n +2 key.txt | head -n -1 | tr -d '\n'
        

        tail 删除第一行,head 删除最后一行,tr 删除换行符。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 我也在尝试删除 和 这就是我认为 sed 的原因会更好。
          【解决方案6】:
          grep '^[^<]' test.txt | tr -d '\n'
          

          【讨论】:

            【解决方案7】:

            这可能对你有用(GNU sed):

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

            收集key startkey stop 之间的行。然后删除第一行和最后一行并删除所有换行符。

            【讨论】:

              【解决方案8】:
              grep  -v -e "key start" -e "key stop" /PATH_TO/key | tr -d '\n'
              

              【讨论】:

                【解决方案9】:
                awk '/ key (start|stop) / {next} {printf("%s", $0)} END {print ""}' filename
                

                【讨论】:

                  【解决方案10】:

                  在 vim 中,它只是 :%s/^M//

                  我一直使用它从行中生成逗号分隔的列表。对于 sed 或 awk,请查看此链接中的许多解决方案:

                  http://www.unix.com/shell-programming-scripting/35107-remove-line-break.html

                  例子:

                  粘贴 -s -d',' tmpfile | sed 's/,/, /g'

                  【讨论】:

                    【解决方案11】:

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

                    【讨论】:

                      猜你喜欢
                      • 2019-10-07
                      • 2016-11-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-11-07
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多