2017-05-11 223 views
0

我有一个文本文件,其中包含jobname,业务名称和时间,最小分隔符' - '(SfdcDataGovSeq-IntegraterJob-43)。此文本文件中有很多作业。我想用作业名称进行搜索,并仅将特定行的时间从43更改为0,并更新相同的文本文件。请告诉我们需要做些什么。AIX中的Unix Shell脚本(Sed命令)

查询我正在使用:(cat test.txt | grep“SfdcDataGovSeq”| sed -e's/43/0 /'> test.txt),但整个文件被替换为只有一行。

+0

欢迎来到StackOverflow。请参加[旅游]。使用某些格式化选项可以提高您的问题的可读性。否则很好的mcve。 – Yunnosch

回答

0
sed -e '/SfdcDataGovSeq/ s/43/0/' test.txt 

这只会在搜索结果为肯定时才会被替换。

与Ed达成一致,下面是解决词边界的解决方法尽管平等与awk是健壮的。

sed -e '/SfdcDataGovSeq/ s/\<43\>/0/g' test.txt 
+0

它是只替换那个特定行中的43,还是用0代替该文件中存在的所有'43'值。 –

+0

它只会替换其中包含“SfdcDataGovSeq”的行。 –

+0

由于职位名称不同,所以只能在一行上操作,因此绝对有帮助 –

0

您应该使用sed的AWK代替:

awk 'BEGIN{FS=OFS="-"} $1=="SfdcDataGovSeq" && $3==43{$3=0} 1' file 

因为它完全字符串或数字(不是正则表达式)在特定领域相匹配,上面是比目前公认的SED更强大给出各种可能的输入值会对你的输入文件造成严重破坏的答案。

+0

嗨,Ed,你能解释“{FS = OFS =” - “} –

+0

它将输入和输出字段分隔符设置为” - “符号,以便您的数据被分割为” - “ - 分隔的字段,请参阅https:// www.gnu.org/software/gawk/manual/gawk.html#Field-Separators和https://www.gnu.org/software/gawk/manual/gawk.html#Output-Separators –