选项1

选项1

我有以下几行的文本文件

From:   arkit Corp. <[email protected]>

Sent:   Friday, June 16, 2017 6:35 PM

To:     User Name

Subject:        arkit Corp.: activity alert.


                 <http:// arkit.co.in/>

ACTIVITY ALERT FOR:

Ravi


https:// arkit.co.in/ Path Read (03/07/2017)

Path: /website/upload/file.txt


https:// arkit.co.in/ Path Read (04/07/2017)

Path: /website/upload/file1.txt



        Copyright ▒ 2017 arkit Corp.. All Rights Reserved.

我想按如下方式打印它们

https:// arkit.co.in/ Path Read (03/07/2017) Path: /website/upload/file.txt
https:// arkit.co.in/ Path Read (04/07/2017) Path: /website/upload/file1.txt

任何人都可以建议我如何并排打印

答案1

如果你想解析整个消息,请使用“地址”,如下所示:

sed -n '/https:/h;/Path:/{H;g;s/\n/ /p;}' yourfile

默认不输出( -n)。将以 开头的行放入https:保留缓冲区中,然后将该Path:行附加到保留缓冲区中,将其移动到模式空间并用空格替换换行符。

或者另一种方法:

sed -e '/^https:/!d;:a' -e '$!N;/Path:/!ba' -e 's/\n\n*/ /' yourfile

这意味着:如果该行不以 开头https:,则删除它 ( /^https:/!d)。否则启动一个循环(:a)来添加新行(如果有的话)($!N),直到我们添加该Path:行。/Path:/!ba。最后用空格替换换行符,将所有内容放在一行中 ( s/\n\n*/ /)。

答案2

选项1

如果你想打破空行,

awk '{printf $0; printf ($0=="")? "\n" : " "}' /path/to/file.txt

解释

  • printf $0:打印当前行(不带换行符)
  • printf ($0=="")? "\n" : " ":如果当前行为空($0=="")?,则打印换行符"\n",否则打印空格" "
  • 注意,这会在最后一行打印一个尾随空格,这对您来说可能是问题,也可能不是问题。

选项2

但是,如果您只想每隔三行中断一次,

awk '{printf $0; printf (NR%3=="0")? "\n" : " "}' /path/to/file.txt

解释

  • (NR%3=="0"):这里的条件测试行号NRmod3是否等于零。即它将每三个输入行打印一个换行符,否则只打印一个空格。

答案3

方法一:我们以段落模式调用 Perl-00并设置 ORS=\n-l并使用显式 print 启用文件读入模式-n。选取以 https:// 开头的当前记录$_,并用下一条记录填充其记录结束位置<>。最后,删除此附加当前记录中的换行符,并将剩余内容打印到标准输出。 ORS 将附加到当前记录中。

perl -ln -00e 's/$/$".<>/e and print tr/\n//dr if m|^https://|' file.txt

在此方法中,当遇到 https:// 行时,我们设置一个循环,并继续附加我们发现的空行到第一个非空行。一直以来,我们不断删除那些空行。

sed -ne '
   \|^https://|!d
   :loop
      N
      s/\n$//
   tloop
   s/\n/ /p
' file.txt

输出

https:// arkit.co.in/ Path Read (03/07/2017) Path: /website/upload/file.txt
https:// arkit.co.in/ Path Read (04/07/2017) Path: /website/upload/file1.txt

相关内容