Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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
在Linux中获取输出的特定部分_Linux_Shell - Fatal编程技术网

在Linux中获取输出的特定部分

在Linux中获取输出的特定部分,linux,shell,Linux,Shell,我有一个shell脚本的输出,如下所示: today=$(date +'%a %b %d') grep "$today" aaa.sh today=$(date +'%a %b %d') sed -n "/${today}/,$ p" aaa.sh aaa.sh输出 Tue Mar 04 01:00:53 2014 Time drift detected. Please check VKTM trace file for more details. Tue M

我有一个shell脚本的输出,如下所示:

today=$(date +'%a %b %d')
grep "$today" aaa.sh
today=$(date +'%a %b %d')
sed -n "/${today}/,$ p" aaa.sh
aaa.sh输出

     Tue Mar 04 01:00:53 2014
     Time drift detected. Please check VKTM trace file for more details.
     Tue Mar 04 07:21:52 2014
     Time drift detected. Please check VKTM trace file for more details.
     Tue Mar 04 13:17:16 2014
     Time drift detected. Please check VKTM trace file for more details.
     Tue Mar 04 16:56:01 2014
     SQL> ALTER DISKGROUP fra  ADD DISK  '/dev/rhdisk20' 
     Wed Mar 05 00:03:42 2014
     Time drift detected. Please check VKTM trace file for more details.
     Wed Mar 05 04:13:39 2014
     Time drift detected. Please check VKTM trace file for more details.
     Tue Mar 05 05:56:07 2014
     GMON querying group 3 at 10 for pid 18, osid 27590856
     GMON querying group 3 at 11 for pid 18, osid 27590856
我需要从今天开始得到零件:

     Wed Mar 05 00:03:42 2014
     Time drift detected. Please check VKTM trace file for more details.
     Wed Mar 05 04:13:39 2014
     Time drift detected. Please check VKTM trace file for more details.
     Tue Mar 05 05:56:07 2014
     GMON querying group 3 at 10 for pid 18, osid 27590856
     GMON querying group 3 at 11 for pid 18, osid 27590856
你可以用

  tail -n 7 filename
用于获得所需的输出。它基本上会给出名为
filename
的文本文件的最后七行

要从今天开始获取解决方案,您可以使用:

 k=$(date +"%a %b %d")
 g=$(grep -nr "$k" in|cut -f1 -d:|head -1)
 total=$(wc -l<in)
 l=`expr $total - $g + 1
 tail -n$l in
k=$(日期+%a%b%d)
g=$(grep-nr“$k”在|切口-f1-d:|头部-1)

total=$(wc-l我想我有一个简单的解决方案:

获取
date
以与文件中的日期匹配的格式输出日期(在格式化选项上选中
man date
).由于我们不想匹配时/分/秒,我们必须调用
日期
两次:一次用于工作日/月/日的一半,另一次用于完整日期结束时的年半。在这两部分之间,我们将horus/分/秒与
*
正则表达式匹配

然后做:

aaa.sh | grep -E '`date --only-weekday-month-day`.*`date --only-year`' -A 999999

虽然我使用的是NewWorld的答案,但可以修改为

将日期的输出转换为与文件格式类似的格式

假设在变量'D'中,您得到了该输出

sed '1,/${D}/d' aaa.sh
将在匹配日期后输出所有行

示例:假设您获得了
D=“Wed Mar 05 00:03:42 2014”

输出将按预期进行。

请尝试

sed-n'/Wed Mar 05/,$p'aaa.sh

此处
-n
表示“除非指定,否则不要打印任何内容”。
将打印与表达式/Wed\Mar\05/匹配的行的第一次出现,直到文件结束(
p
)“

您可以按如下格式获取日期:

today=$(date +'%a %b %d')
grep "$today" aaa.sh
today=$(date +'%a %b %d')
sed -n "/${today}/,$ p" aaa.sh
然后像这样搜索它:

today=$(date +'%a %b %d')
grep "$today" aaa.sh
today=$(date +'%a %b %d')
sed -n "/${today}/,$ p" aaa.sh
如果今天起有几行没有日期,例如您的GMON行,您可以添加
-a
来说明您想要的匹配后有多少行,并使用一个大数字:

grep -A 999999 "$today" aaa.sh
如果您在AIX上,并且没有-A选项,请像这样使用sed:

today=$(date +'%a %b %d')
grep "$today" aaa.sh
today=$(date +'%a %b %d')
sed -n "/${today}/,$ p" aaa.sh
说明:


也就是说,将今天的日期以“Wed Mar 05”的格式存储在变量
today
中。然后搜索,不打印任何内容(
-n
),直到找到该日期,从该点开始,直到文件结束(
$
)打印所有行(
p
).

我不是bash的专业人士。所以我需要一个明确的解决方案。@AloneInTheDark
man awk
man sed
拥有找到解决方案所需的所有信息。还有
man date
。如果你仍然无法解决这个问题,你应该尝试加入这个问题。解决方案是在bash上变得专业一点t确实需要几个小时的阅读,我需要从今天开始的部分。可能会有更多的行。感谢您的解决方案。我还有一个问题,如何在AIX中执行相同的操作?因为语法不同。@AloneInTheDark上述解决方案在模式匹配后打印所有行,它不包括第一行。仅供参考,您可以se sed-n/${D}/,$p“aaa.sh以避免这种情况。如何在AIX中做到这一点?因为其中没有-A参数。我得到一个错误:aaa.sh[10]:Wed:not found.sed:0602-410第一个正则表达式不能为null。我的日期格式如下(“Wed-Mar 05”)请再试一次,我添加了大括号。只是一个友好的建议…您不需要用斜杠来转义空格。而且,当只有一段代码要执行时,您不需要指定
-e
,因为sed知道它是什么以及如何处理它。