使用 shell 命令提取版本
Extract version using shell commands
我正在尝试使用 shell 命令从下面提到的 URL 中提取版本,例如 grep、awk、sed、cut,哪个最合适
https://abcd/efgh/1.1.3/hijkl/mnop
https://abcd/efgh/hijkl/2.3.4.5/mnop
https://abcd/3.4/efgh/hijkl/mnop
我想从 URL 中单独提取版本(带点的数字),其中的位置可能与上面的示例不同。寻找建议。
预期输出为:
1.1.3
2.3.4.5
3.4
你可以使用这个grep
:
grep -Eo '[0-9]+(\.[0-9]+)+' file
1.1.3
2.3.4.5
3.4
我会按照以下方式使用 GNU AWK
,令 file.txt
内容为
https://abcd/efgh/1.1.3/hijkl/mnop
https://abcd/efgh/hijkl/2.3.4.5/mnop
https://abcd/3.4/efgh/hijkl/mnop
然后
awk 'BEGIN{RS="[/\n]"}/^[.[:digit:]]+$/' file.txt
输出
1.1.3
2.3.4.5
3.4
说明:我将行分隔符 (RS
) 指定为 /
或换行符 (\n
),然后仅打印行(即 / 或换行符和 / 或 / 和换行符)仅包含 .
或数字 - 为了达到这样的效果,我使用 ^
和 $
表示记录的开始和结束。
使用 awk
,使用 GNU awk
中显示的示例编写和测试。
awk 'match([=10=],/([0-9]+\.){1,}[0-9]+/){print substr([=10=],RSTART,RLENGTH)}' Input_file
解释:为以上添加详细解释。
awk ' ##Starting awk program from here.
match([=11=],/([0-9]+\.){1,}[0-9]+/){ ##using match function to match regex of ([0-9]+\.){1,}[0-9]+ in current line.
print substr([=11=],RSTART,RLENGTH) ##Printing sub string of matched regex above, starting index is RSTART till value of RLENGTH here.
}
' Input_file ##Mentioning Input_file name here.
我正在尝试使用 shell 命令从下面提到的 URL 中提取版本,例如 grep、awk、sed、cut,哪个最合适
https://abcd/efgh/1.1.3/hijkl/mnop
https://abcd/efgh/hijkl/2.3.4.5/mnop
https://abcd/3.4/efgh/hijkl/mnop
我想从 URL 中单独提取版本(带点的数字),其中的位置可能与上面的示例不同。寻找建议。
预期输出为:
1.1.3
2.3.4.5
3.4
你可以使用这个grep
:
grep -Eo '[0-9]+(\.[0-9]+)+' file
1.1.3
2.3.4.5
3.4
我会按照以下方式使用 GNU AWK
,令 file.txt
内容为
https://abcd/efgh/1.1.3/hijkl/mnop
https://abcd/efgh/hijkl/2.3.4.5/mnop
https://abcd/3.4/efgh/hijkl/mnop
然后
awk 'BEGIN{RS="[/\n]"}/^[.[:digit:]]+$/' file.txt
输出
1.1.3
2.3.4.5
3.4
说明:我将行分隔符 (RS
) 指定为 /
或换行符 (\n
),然后仅打印行(即 / 或换行符和 / 或 / 和换行符)仅包含 .
或数字 - 为了达到这样的效果,我使用 ^
和 $
表示记录的开始和结束。
使用 awk
,使用 GNU awk
中显示的示例编写和测试。
awk 'match([=10=],/([0-9]+\.){1,}[0-9]+/){print substr([=10=],RSTART,RLENGTH)}' Input_file
解释:为以上添加详细解释。
awk ' ##Starting awk program from here.
match([=11=],/([0-9]+\.){1,}[0-9]+/){ ##using match function to match regex of ([0-9]+\.){1,}[0-9]+ in current line.
print substr([=11=],RSTART,RLENGTH) ##Printing sub string of matched regex above, starting index is RSTART till value of RLENGTH here.
}
' Input_file ##Mentioning Input_file name here.