私のプロパティファイルには次のデータがあります。
domainurl=https://example.com
abc.host=10.5.39.23#10.15.1.5
locator.port=1013#1013
db.cassandra.contactPoints=10.15.13.28,10.35.73.16,10.35.93.4
個別にうまく機能する次の2つのコマンドがありますが、それらを組み合わせようとすると予想される結果が得られません。これは命令です
grep -P '((?<=[^0-9.]|^)[1-9][0-9]{0,2}(\.([0-9]{0,3})){3}(?=[^0-9.]|$)|(http|ftp|https|ftps|sftp)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/+#-]*[\w@?^=%&/+#-])?|\.port|\.host|contact-points|\.uri|\.endpoint)'$file | grep '^[^#]'
| awk '/http:\/\// {print $2,80}
/https:\/\// {print $2,443}
/Points/ {print $2,"NA"}
/host/ {h=$2}
/port/ {print h,$2; h=""}'
以下は、Excelワークシートのコンマ区切り値の別のコマンドです。
awk -F"," '{for(i=1;i<=NF;i++){if(i%NF==0){ORS="\n"} {if($i ~ /^\"/ || $i ~ /\"$/) {a=a OFS $i;j++;{if(j%2==0){sub(/^[[:space:]]/,X,a); print a;j=0;a=""}}} else {print $i}}}}'
結合するときの最終スクリプトです。いいえ期待どおりに動作
grep -P '((?<=[^0-9.]|^)[1-9][0-9]{0,2}(\.([0-9]{0,3})){3}(?=[^0-9.]|$)|(http|ftp|https|ftps|sftp)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/+#-]*[\w@?^=%&/+#-])?|\.port|\.host|contact-points|\.uri|\.endpoint)' abc.properties | grep '^[^#]' | awk '{split($0,a,"="); print a[1],a[2]}' | awk -F"," '{for(i=1;i<=NF;i++){if(i%NF==0){ORS="\n"} {if($i ~ /^\"/ || $i ~ /\"$/) {a=a OFS $i;j++;{if(j%2==0){sub(/^[[:space:]]/,X,a); print a;j=0;a=""}}} else {print $i}}}}' | awk '/http:\/\// {print $2,80}
/https:\/\// {print $2,443}
/Points/ {print $2,"NA"}
/host/ {h=$2}
/port/ {print h,$2; h=""}' | column -t
実際の出力
http://example.com 80
10.15.13.28 NA
10.5.39.23#10.15.1.5 1013#1013
期待される出力
http://example.com 80
10.15.13.28 NA
10.35.73.16 NA
10.35.93.4 NA
10.5.39.23 1013
10.15.1.5 1013
注:カンマ(、)で区切られたハッシュ(#)はcsvファイルの次の列に表示されます。
ご回答ありがとうございます。
答え1
$ grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b|https.*" /tmp/test.txt
https://example.com
10.5.39.23
10.15.1.5
10.15.13.28
10.35.73.16
10.35.93.4
$ cat /tmp/test.txt
domainurl=https://example.com
abc.host=10.5.39.23#10.15.1.5
locator.port=1013#1013
db.cassandra.contactPoints=10.15.13.28,10.35.73.16,10.35.93.4
答え2
私はそれが何をしているのかを調べるためにコードを分解しようとしません。しかし、あなたがそれを説明したいと思うなら、私は私の答えを修正できるかどうかを調べます。
ただし、デバッグの秘訣は、各ステップでパイプラインの出力を調べて、期待した結果であることを確認することです。
a | b | c
たとえば、 and があり、x | y
それを に結合しようとしているようですa | b | x | y | c
。または他のもの。
したがって、何がうまくいかないかを知るには、a
.thenをチェックしてくださいa | b
。それからa | b | x
。など。
答え3
ご提案と回答ありがとうございます。シンボルを結合するために「|」を使用する方法を見つけましたが、これは目的の結果を得る最終コードです。
grep -P '((?<=[^0-9.]|^)[1-9][0-9]{0,2}(\.([0-9]{0,3})){3}(?=[^0-9.]|$)|(http|ftp|https|ftps|sftp)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/+#-]*[\w@?^=%&/+#-])?|\.port|\.host|contact-points|\.uri|\.endpoint)' $file | grep '^[^#]'| awk '{split($0,a,"="); print a[1],a[2]}'|sed 's/^\|#/,/g'| awk '/http:\/\// {print $2,80}
/https:\/\// {print $2,443}
/Points/ {print $2,"9042"}
/host/ {h=$2}
/port/ {print h,$2; h=""}'|awk -F'[, ]' '{for(i=1;i<NF;i++){print $i,$NF}}'|column -t