Bash 从脚本中的文件中重新映射特定字符串
我有以下文件:(文件名为:2015_09_22_processedPartnumList.txt的示例文件,位置:/A/b/c/itemreport) 我只想从上面的文件中获取所有ID,即12345678。。。。(每个id在单独的行中,不以逗号分隔)在文件/a/b/c/d/id\uCode>date+%d\u%m\u%Y\u%H\u%m\u%S中 我已经写了下面的脚本,但是我得到的文件是空的。没有任何例外或任何事情。因此,我很难识别错误。请告诉我脚本中有什么错误Bash 从脚本中的文件中重新映射特定字符串,bash,file,shell,unix,grep,Bash,File,Shell,Unix,Grep,我有以下文件:(文件名为:2015_09_22_processedPartnumList.txt的示例文件,位置:/A/b/c/itemreport) 我只想从上面的文件中获取所有ID,即12345678。。。。(每个id在单独的行中,不以逗号分隔)在文件/a/b/c/d/id\uCode>date+%d\u%m\u%Y\u%H\u%m\u%S中 我已经写了下面的脚本,但是我得到的文件是空的。没有任何例外或任何事情。因此,我很难识别错误。请告诉我脚本中有什么错误 LOGDIR=/a/b/logd
LOGDIR=/a/b/logdir
tr=`date +%p`
echo $tr
if [ $tr = "PM" ];
then
date=`date +%Y-%m-%d`
echo "considering today's date for grepping logs"
else
date=`date -d '1 day ago' +%Y-%m-%d`
echo "considering yesterday's date for grepping logs as job run is delayed"
fi
ITEM_FILE=/a/b/c/d/ids_`date +%d_%m_%Y_%H_%M_%S`.log
在PCRE中实现grep后,我得到了这个信息,并且没有任何ID被复制到新文件中。如果您的
grep
支持PCRE,您可以执行以下操作:
grep -Po '.*:\s\K\d+$' /a/b/c/itemreport/2015_09_22_processedPartnumList.txt \
>/apps/feeds/out/catalog/ItemPartnumbers_"$(date '+%d_%m_%Y_%H_%M_%S')".log
将匹配到*:\s
之后的空格,:
将放弃匹配\K
将匹配我们所需的部分,即直到行尾的数字\d+$
% grep -Po '.*:\s\K\d+$' 2015_09_22_processedPartnumList.txt \
>ItemPartnumbers_"$(date '+%d_%m_%Y_%H_%M_%S')".log
% cat ItemPartnumbers_09_11_2015_11_30_49.log
13982787
14011550
13984790
13984791
14176509
14902623
14924193
14924194
13982787
46795670
46795671
如果您的
grep
支持PCRE,您可以执行以下操作:
grep -Po '.*:\s\K\d+$' /a/b/c/itemreport/2015_09_22_processedPartnumList.txt \
>/apps/feeds/out/catalog/ItemPartnumbers_"$(date '+%d_%m_%Y_%H_%M_%S')".log
将匹配到*:\s
之后的空格,:
将放弃匹配\K
将匹配我们所需的部分,即直到行尾的数字\d+$
% grep -Po '.*:\s\K\d+$' 2015_09_22_processedPartnumList.txt \
>ItemPartnumbers_"$(date '+%d_%m_%Y_%H_%M_%S')".log
% cat ItemPartnumbers_09_11_2015_11_30_49.log
13982787
14011550
13984790
13984791
14176509
14902623
14924193
14924194
13982787
46795670
46795671
这不是一个很好的解决方案,但它是有效的
cat your\ file | cut -d ':' -f2-2 | tr -d INFO
这不是一个很好的解决方案,但它是有效的
cat your\ file | cut -d ':' -f2-2 | tr -d INFO
对不起,我不理解“*:\s\K\d+$”,如果可能,请简要解释一下。另外,这部分是否正确:
date“+%Y\u%m\u%d”
\u processedPartnumList.txt,因为我主要怀疑的是这个日期。请再次查看编辑后的问题,我没有像您使用带PCRE的grep那样获得零件号。@tanmay2507您的grep似乎不支持PCRE,您使用的是哪个操作系统?Mac OSX Yosemite,版本10.10。5@tanmay2507嗯……由于Mac默认的grep
不支持PCRE,因此此解决方案将无法工作。您可以安装GNU grep以启用PCREgrep
。抱歉,但我不理解“*:\s\K\d+$”,如果可能,请简要解释。另外,这部分是否正确:date“+%Y\u%m\u%d”
\u processedPartnumList.txt,因为我主要怀疑的是这个日期。请再次查看编辑后的问题,我没有像您使用带PCRE的grep那样获得零件号。@tanmay2507您的grep似乎不支持PCRE,您使用的是哪个操作系统?Mac OSX Yosemite,版本10.10。5@tanmay2507嗯……由于Mac的默认grep
不支持PCRE,因此此解决方案无法工作。您可以安装GNU grep以启用PCREgrep
。。。。。。。O 14515220\O 13982787\O 46795670\O 46795672\O 46795675\O 46795679\O 10001857\}我将此作为我的输出。那么,为什么我到处都有这个“O”,有没有办法只提取数字部分并删除每个零件号后面的“/”。。。。。。O 14515220\O 13982787\O 46795670\O 46795672\O 46795675\O 46795679\O 10001857\}我将此作为我的输出。那么,为什么我到处都有这个“O”,有没有办法只提取数字部分并删除每个零件号后面的“/”。