嘗試提取括號(AA)之間的數字並修改(例如乘以300),並使用新值更新舊值(AA) (AA * 300)全文。正則表達式從圓括號中提取數字,修改,然後替換原始數字
例輸入:
RRRR TTTTYYY (22);
UUUUUUU IIIIII4 (55);
預期輸出:
RRRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);
嘗試提取括號(AA)之間的數字並修改(例如乘以300),並使用新值更新舊值(AA) (AA * 300)全文。正則表達式從圓括號中提取數字,修改,然後替換原始數字
例輸入:
RRRR TTTTYYY (22);
UUUUUUU IIIIII4 (55);
預期輸出:
RRRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);
gawk
來救援!
$ awk '{print $1,$2,"("300*gensub(/\((.*)\);/,"\\1",1,$3)");"}' file
RRRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);
條件括號
$ awk '{v=gensub(/\((.*)\);/,"\\1",1,$NF); if(int(v)==v) $NF="("(300*v)");"}1' file
RRRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);
ZZZ FFF (2,3);
,我添加了最後一行輸入文件基礎上的價值。
也許這是對整數限制比賽只
$ awk '{if(match($NF,/\([0-9]+\)/))
$NF="(" 300*substr($NF,RSTART+1,RLENGTH-2) ");"}1' file
RRRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);
ZZZ FFF (2,3);
工作正常。 是否有任何通用的解決方案: 測試括號(AA)之間的數字是否是一個整數,則* 300,在文本中的任何位置, 避免(2,3)類型的數字。 –
整數測試,你可以做'int(x)== x' – karakfa
,程序上更好的解決方案:
my $str = 'RRRR TTTTYYY (22)';
my $num = $1 if $str =~ /\((\d+)\)/;
my $result = $num * 300;
$str =~ s/$num/$res/;
print $str;
功能:
sub x {
my $str = @_;
my $num = $1 if $str =~ /\((\d+)\)/;
my $result = $num * 300;
$str =~ s/$num/$res/;
return $str;
}
print x('RRRR TTTTYYY (22)');
爲一個班輪哪裏file.txt
每行包含一個字符串
perl -lne '$num = $1 if $_ =~ /\((\d+)\)/; $res = $num * 300; $_ =~ s/$num/$res/; print' file.txt
如果你的字符串中唯一的數字是,括號內的的,那麼這是非常簡單的用Perl:
$ perl -pE 's/(\d+?)/300*$1/eg' your_input_file.txt
RRR TTTTYYY (6600);
UUUUUUU IIIIII1200 (16500);
如果您需要檢查括號,然後就有點困難
$ perl -pE 's/(?<=\()(\d+?)(?=\))/300*$1/eg' your_input_file.txt
RRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);
請顯示您所做的任何嘗試。 – James
你只希望有一個單一的括號? (例如沒有嵌套圓括號) –
你可以編輯和詳細說明你的問題嗎?我根本不明白你在問什麼。你正在使用縮寫詞,這看起來好像你沒有在這方面投入太多精力。 – TankorSmash