簡體   English   中英

添加|| 正則表達式在perl腳本中的bash`ed ed-liner

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM