[英]Adding an || regex to a bash ``ed one-liner in a perl script
我想添加一個|| 如果有意義的話,在perl腳本中使用bash`ed ed-liner進行正則表達式。
my $result = `df -H | grep -vE '^Filesystem|tmpfs|cdrom|none' | awk '{ print \$1 "\t" \$5 " used."}'`;
# .Private maybe the same as /dev/sdb1 so I'm trying to remove it too
# by trying to add || (m/\.Private/) to the above
print "$result";
所以我現在從輸出文件系統,tmpfs,cdrom或none開始刪除行,但是如果可能的話,我還想和“或包含.Private的行”到一行一行...
我也有以下內容,但想用上面的代碼重現其結果......
my @result2 =Shell::df ("-H");
shift @result2; # get rid of "Filesystem..."
for( @result2 ){
next if ((/^tmpfs|tmpfs|cdrom|none/) || (m/\.Private/));
my @words2 = split('\s+', $_);
print $words2[0], "\t", $words2[4], " used\.\n";
}
我建議你完全擺脫“awk”部分。 從perl里面調用awk很傻。
相反,依賴於使用列表上下文捕獲行,然后在perl中進行處理。
my @lines =
df -H
;
my @results = grep ... @lines; # perl 'grep' builtin
如果你堅持使用unix grep,為什么不在你的grep排除模式中添加'| .Private'?
你的正則表達式不符合你的想法。 它匹配以Fileystem
或在任何地方包含其他字的字符串。
試試這個:
grep -vE '^(Filesystem|tmpfs|cdrom|none)|\.Private'
您只需要將\\.Private
部分添加到當前正則表達式:
grep -vE '^Filesystem|tmpfs|cdrom|none|\.Private'
另外,模式^Filesystem|tmpfs|cdrom|none
可能實際上並不是你想要的,因為只有Filesystem
在行的開頭匹配,如果它們出現在輸入的任何地方,其他部分將匹配。 要在開頭匹配它們,請將其更改為:
'^Filesystem|^tmpfs|^cdrom|^none'
像這樣?
my $result = `df -H | grep -vE '(^Filesystem|tmpfs|cdrom|none)|\.Private' | awk '{ print \$1 "\t" \$5 " used."}'`;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.