如何将多行文本转换为一行?

Posted

技术标签:

【中文标题】如何将多行文本转换为一行?【英文标题】: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 完成吗?

【问题讨论】:

【参考方案1】:
tr -d '\n' < key.txt

发现于http://linux.dsplabs.com.au/rmnl-remove-new-line-characters-tr-awk-perl-sed-c-cpp-bash-python-xargs-ghc-ghci-haskell-sam-ssam-p65/

【讨论】:

我也在尝试删除 和 这就是我认为 sed 的原因会更好.. 目前无权访问控制台。我找到了这个但是 linuxquestions.org/questions/programming-9/… 抱歉没有看到最后一行。【参考方案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

【讨论】:

以上是关于如何将多行文本转换为一行?的主要内容,如果未能解决你的问题,请参考以下文章

Linux下使用xargs将多行文本转换成一行并用tr实现逗号隔开

将多行转换为一行

Pandas: 如何将一列中的文本拆分为多行? | Python

如何使用 Vim 根据模式将文本拆分为多行?

如何将导航栏大标题转换为多行,居中对齐

怎么将excel中两列转换成多行多列