我有以下 cmd extract.sh
。
它的工作原理是在终端中执行搜索“ABC123”,并在找到“ABC123”后orig.txt
输出到剩余内容。result.txt
不幸的是,当我通过 cron/crontab 运行脚本时,它似乎忽略/跳过“more”命令,只将 orig.txt 输出到 result.txt。
任何帮助表示赞赏。
----------------------------------extract.sh-------------------------- ----------------
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
. $HOME/.profile
more +/"ABC123" orig.txt > result.txt
----------------------crontab---------------------------------------- ----------------
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /root/extractpdf_v3.sh
* * * * * /bin/bash /root/extract.sh
答案1
您可以使用sed
代替more
,正如您在评论中提到的那样,您需要在与特定单词匹配的行之后使用文件的内容。例如输入文件:
Test before
Test match
Test after
命令:
sed -n -e '/match/,$p'
输出:
Test match
Test after
-n
禁用 sed 在执行脚本后打印每一行的默认行为,-e
向 sed 指示一个脚本,/match/,$
是地址(行)范围选择,表示与“匹配”正则表达式(如 grep)匹配的第一行到文件末尾($)p
是打印当前行的打印命令。
欲了解更多详情,请查看原答案https://stackoverflow.com/questions/7103531/how-to-get-the-part-of-file-after-the-line-that-matches-grep-expression-first