ここにawkスクリプトがあります。それはちょうどで-場合、今ここでxmlファイル(それはのpom.xmlだ)の構造だxml値の変数を使用したawkパターンマッチング
#!usr/bin/awk -f
BEGIN {
FS="."
artifactPattern="/<artifactId>artifactName1|artifactName2<\\/artifactId>/"
# print "-------------" artifactPattern
}
{
toPrint = 1
if ($0 ~ /<dependencies>/) {
matches=1000;
}
else if ($0 ~ /<dependency>/) {
matches +=100;
}
else if ($0 ~ /<\/dependency>/) {
matches =1000;
}
else if ($0 ~ /<groupId>(com.group1.*)|(com.group2.*)|(com.group3.*)<\/groupId>/) {
matches += 10;
}
# else if($0 ~ /<artifactId>artifactName1|artifactName2<\/artifactId>/){
else if($0~artifactPattern){
matches += 1;
}
else if ($0 ~ /<version>[0-9]+\.[0-9]+\.[0-9]+<\/version>/) {
print "debugging: matched 1 -", matches
if (matches == 1111) {
lastPart="0-SNAPSHOT</version>"
print $1 "." $2+1 "." lastPart;
matches -= 11;
toPrint = 0
}
}
else if ($0 ~ /<\/dependencies>/) {
matches=0
}
if (toPrint == 1) {
print $0
}
}
END {
}
mAwk.awkと呼ばれるファイルにあります:私が使用している場合
<project>
<random tags/>
<dependencies>
<dependency>
<groupId>data</groupId>
<artifactId>data</artifactId>
<version>1.2.3</version>
</dependency>
... repeat...
</dependencies>
</project
問題は、ありますライン:
# else if($0 ~ /<artifactId>payment-common|test2-common<\/artifactId>/){
だけではなく、1つ下の、それがうまく一致しますが、私は、変数内の値を入れると、それは失敗します。何が起きてる?
私の最終的な目的は...シェルスクリプトなどを介して
awk -v pattern=`cat ./artifactPatterns.txt` mAwk.awk -f myFile.xml
これを呼び出すことで、artifactPatterns.txtは、変数が、例えばawkのファイルに保持しているWAHTのようになります。
/<artifactId>artifactName1|artifactName2<\\/artifactId>/
私はたくさんのものを試しましたが、何も動作していないようです、あなたの時間をありがとう!
'awk'ではなく' xmlstarlet'のようなツールを使ってシェルスクリプトでXMLを解析することを検討しましたか? – Barmar
@Barmar明らかにそうではありませんが、それは彼に何度か示唆されています。 –
@MichaelVehrsええ、この男は本当に彼が問題に遭遇するたびに質問することによってawkを学ぶことに決心しているようです。 – Barmar