Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将包含多个单词的单行拆分为多行,每行上有x个单词_Bash_Sed_Split_Xargs - Fatal编程技术网

Bash 将包含多个单词的单行拆分为多行,每行上有x个单词

Bash 将包含多个单词的单行拆分为多行,每行上有x个单词,bash,sed,split,xargs,Bash,Sed,Split,Xargs,我有一个大的文本文件,它只包含一行。看起来是这样的: blaalibababla.ru text text text text what's the weather like tooday? blaazzabla.zu some_text blabewdwefla.au it is important not to be afraid of sed blabkrlqbla.ru wjenfkn lkwnef lkwnefl blarthrthbla.net 1234 e12edq 42wsdfg

我有一个大的文本文件,它只包含一行。看起来是这样的:

blaalibababla.ru text text text text what's the weather like tooday? blaazzabla.zu some_text blabewdwefla.au it is important not to be afraid of sed blabkrlqbla.ru wjenfkn lkwnef lkwnefl blarthrthbla.net 1234 e12edq 42wsdfg blablabla.com this should finally end
blaalibababla.ru text text text text what's the weather like tooday?
blaazzabla.zu some_text
blabewdwefla.au it is important not to be afraid of sed
blabkrlqbla.ru wjenfkn lkwnef lkwnefl
blarthrthbla.net 1234 e12edq 42wsdfg 
blablabla.com this should finally end
我需要一种方法使它看起来像这样:

blaalibababla.ru text text text text what's the weather like tooday? blaazzabla.zu some_text blabewdwefla.au it is important not to be afraid of sed blabkrlqbla.ru wjenfkn lkwnef lkwnefl blarthrthbla.net 1234 e12edq 42wsdfg blablabla.com this should finally end
blaalibababla.ru text text text text what's the weather like tooday?
blaazzabla.zu some_text
blabewdwefla.au it is important not to be afraid of sed
blabkrlqbla.ru wjenfkn lkwnef lkwnefl
blarthrthbla.net 1234 e12edq 42wsdfg 
blablabla.com this should finally end
我知道如何使用单个域名和
sed

sed -i 's/blablabla.ru/\n&/g' file.txt
“但不包括后面的附加文本。”-这不是我的意思

如果
sed
不是最好的方法,请告诉我

UPD: 这是我的文本文件:

wsd.qwd.qwd.kjqnwk.ru PUPPETD CRITICAL 2017-01-13 00:09:52   lor notify-by-sms FILE_AGE CRITICAL:   /var/lib/puppet/state/state.yaml is 2438046 seconds old and 19459 bytes   zm-goas-04.asdg.net LOAD CRITICAL 2017-01-13 00:10:32   tech-lor notify-by-telegram CRITICAL - load average: 42.91,   49.91, 53.88   glas07.kvm.ext.asdg.ru PUPPETD CRITICAL 2017-01-13 00:28:02   lor notify-by-sms FILE_AGE CRITICAL:   /var/lib/puppet/state/state.yaml is 19821 seconds old and 26337 bytes    
我需要它看起来像:

wsd.qwd.qwd.kjqnwk.ru PUPPETD CRITICAL 2017-01-13 00:09:52   lor notify-by-sms FILE_AGE CRITICAL:   /var/lib/puppet/state/state.yaml is 2438046 seconds old and 19459 bytes   
zm-goas-04.asdg.net LOAD CRITICAL 2017-01-13 00:10:32   tech-lor notify-by-telegram CRITICAL - load average: 42.91,   49.91, 53.88   
glas07.kvm.ext.asdg.ru PUPPETD CRITICAL 2017-01-13 00:28:02   lor notify-by-sms FILE_AGE CRITICAL:   /var/lib/puppet/state/state.yaml is 19821 seconds old and 26337 bytes    

一种更简单的方法,使用
xargs
一次处理
n
记录,在您的情况下,这就是
2

xargs -n2 <file
blablabla.ru some_text
blablabla.zu some_text
blablabla.au some_text
blablabla.ru some_text
blablabla.net some_text
blablabla.com some_text
要替换回原始文件,请执行以下操作:

xargs -n2 <file >tmpfile; mv tmpfile file
xargs-n2 tmpfile;mvtmpfile文件

一种更简单的方法,使用
xargs
一次处理
n
记录,在您的情况下,这就是
2

xargs -n2 <file
blablabla.ru some_text
blablabla.zu some_text
blablabla.au some_text
blablabla.ru some_text
blablabla.net some_text
blablabla.com some_text
要替换回原始文件,请执行以下操作:

xargs -n2 <file >tmpfile; mv tmpfile file
xargs-n2 tmpfile;mvtmpfile文件
Awk:

解释:

将每重复两次的
[^]+
(非空格字符串和空格)替换为自身(
&
)和换行符
\n
。如果最后有剩余内容(即不匹配),则不会打印(除非用
{}1
包装
gsub(…)
)。

Awk:

解释:


将每重复两次的
[^]+
(非空格字符串和空格)替换为自身(
&
)和换行符
\n
。如果最后有一个剩余部分(即不匹配),它将不会被打印出来(除非你用
{}1
包装
gsub(…)
)。

尝试在这个模式上拆分:
([-a-z0-9]+\.[a-z]+){1,}
用于域名

使用GNU时:

sed -r 's/ +(([-a-z0-9]+\.[a-z]){1,}) */\n\1/g' file

请注意,任何匹配一个空格后跟
[-a-z0-9]
、后跟
[a-z]
字符的字符串都将被处理为域名。

尝试按此模式拆分:
([-a-z0-9]+\.[a-z]+){1,}

使用GNU时:

sed -r 's/ +(([-a-z0-9]+\.[a-z]){1,}) */\n\1/g' file

请注意,任何与一个空格后跟
[-a-z0-9]
、后跟
[a-z]
字符相匹配的字符串都将作为域名处理。

您能否给出一些实际数据作为示例?我很好奇一些文本到底是什么样子。请用你的代码编辑你能给出一些实际数据作为例子吗?我很好奇一些文本到底是什么样子。用你的代码编辑please@JamesBrown:是的:),最后的4k跑得很快,回答是@Inian!我正在做一些事情,我只需要这个
xargs-n
。是的,我比你高得多,看起来这让你高高在上!祝贺你。现在,下一个是10万美元D@JamesBrown当前位置这正是我为
bash
,gold所做的。击中它,然后真正获得生命:D@JamesBrown:是的:),最后的4k跑得很快,回答是@Inian!我正在做一些事情,我只需要这个
xargs-n
。是的,我比你高得多,看起来这让你高高在上!祝贺你。现在,下一个是10万美元D@JamesBrown当前位置这正是我为
bash
,gold所做的。点击它,然后实际得到一个生命:Dsed-r的/+([-a-z0-9]+\[a-z]){1,})*/\n\1/g'文件-不工作sed-r的/+(([-a-z0-9]+\[a-z]){1,})*/\n\1/g'文件-工作非常感谢您的帮助!很乐意帮忙。请看一看你能不能把你的答案从这一行改成:sed-r的/+([-a-z0-9]+\.[a-z]{1,})*/\n\1/g'文件改成:sed-r的/+([-a-z0-9]+\.[a-z]{1,})*/\n\n\1/g'文件?sed-r的/+([-a-z0-9]+\.[a-z]{1,})*/\n\n\n\1/g'文件不起作用*/\n\1/g'文件-非常有用,非常感谢您的帮助!很乐意帮忙。请看一看您能否将您的答案从这一行更改为:sed-r's/+([-a-z0-9]+\[a-z]){1,})*/\n\1/g'文件到这一行:sed-r's/+([-a-z0-9]+\[a-z]){1,})*/\n\1/g'文件?