est*_*ose 6 bash text-processing for
我有一个像这样有很多行的文件
/item/pubDate=2014 年 2 月 23 日星期日 00:55:04 +010
如果我执行这个
echo "/item/pubDate=Sun, 23 Feb 2014 00:55:04 +010" | grep -Po "(?<=\=).*"
Sun, 23 Feb 2014 00:55:04 +010
Run Code Online (Sandbox Code Playgroud)
我得到了正确的日期(全部在一行中)。现在我想用 xml 文件中的很多日期来尝试这个。我用这个,没问题。
xml2 < date_list | egrep "pubDate" | grep -Po "(?<=\=).*"
Fri, 22 Jan 2016 17:56:29 +0100
Sun, 13 Dec 2015 18:33:02 +0100
Wed, 18 Nov 2015 15:27:43 +0100
...
Run Code Online (Sandbox Code Playgroud)
但现在我想在 bash 程序中使用日期,我得到了这个输出
for fecha in $(xml2 < podcast | egrep "pubDate" | grep -Po "(?<=\=).*"); do echo $fecha; done
Fri,
22
Jan
2016
17:56:29
+0100
Sun,
13
Dec
2015
18:33:02
+0100
Wed,
18
Nov
2015
15:27:43
+0100
Run Code Online (Sandbox Code Playgroud)
我希望在一行中(在变量 fecha 中)日期输出与第一个和第二个示例如何,但我不知道该怎么做。
改为这样做:
while IFS= read -r fecha; do
echo $fecha
done < <(xml2 < podcast | egrep "pubDate" | grep -Po "(?<=\=).*")
Run Code Online (Sandbox Code Playgroud)
Bash 将分隔“单词”以通过内部字段分隔符 ( $IFS)中的字符循环。您可以通过IFS在read命令期间设置为空来暂时禁用此行为。上面的模式将始终逐行循环。
<(command)使命令的输出看起来像一个真实的文件,然后我们将其重定向到我们的read循环中。
$ while IFS= read -r line; do echo $line; done < <(cat ./test.input)
Fri, 22 Jan 2016 17:56:29 +0100
Sun, 13 Dec 2015 18:33:02 +0100
Wed, 18 Nov 2015 15:27:43 +0100
Run Code Online (Sandbox Code Playgroud)