Sed 打印中间有u的有效单词
我已经做了研究,但没有找到解决问题的办法。 我试图提取字符串中的所有有效单词(以字母开头),并用下划线(“\ux”)连接它们。我正在寻找awk、sed或grep等解决方案 比如:Sed 打印中间有u的有效单词,sed,awk,grep,word,concatenation,Sed,Awk,Grep,Word,Concatenation,我已经做了研究,但没有找到解决问题的办法。 我试图提取字符串中的所有有效单词(以字母开头),并用下划线(“\ux”)连接它们。我正在寻找awk、sed或grep等解决方案 比如: echo "The string under consideration" | (awk/grep/sed) (pattern match) 示例1 输入: 1.2.3::L2 Traffic-house seen during ABCD from 2.2.4/5.2.3a to 1.2.3.X11 XYZ-2-V
echo "The string under consideration" | (awk/grep/sed) (pattern match)
示例1
输入:
1.2.3::L2 Traffic-house seen during ABCD from 2.2.4/5.2.3a to 1.2.3.X11
XYZ-2-VRECYY_FAIL: Verify failed - Client 0x880016, Reason: Object exi
ABCMGR-2-SERVICE_CRASHED: Service "abcmgr" (PID 7582) during UPGRADE
期望输出:
L2_Traffic_house_seen_during_ABCD_from
示例2
输入:
1.2.3::L2 Traffic-house seen during ABCD from 2.2.4/5.2.3a to 1.2.3.X11
XYZ-2-VRECYY_FAIL: Verify failed - Client 0x880016, Reason: Object exi
ABCMGR-2-SERVICE_CRASHED: Service "abcmgr" (PID 7582) during UPGRADE
期望输出:
XYZ_VRECYY_FAIL_Verify_failed_Client_Reason_Object_exi
ABCMGR_SERVICE_CRASHED_Service_abcmgr_PID_during_UPGRADE
示例3
输入:
1.2.3::L2 Traffic-house seen during ABCD from 2.2.4/5.2.3a to 1.2.3.X11
XYZ-2-VRECYY_FAIL: Verify failed - Client 0x880016, Reason: Object exi
ABCMGR-2-SERVICE_CRASHED: Service "abcmgr" (PID 7582) during UPGRADE
期望输出:
XYZ_VRECYY_FAIL_Verify_failed_Client_Reason_Object_exi
ABCMGR_SERVICE_CRASHED_Service_abcmgr_PID_during_UPGRADE
这个解决方案需要一些调整,我认为需要gawk将regexp作为“记录分隔符”
gawk-v-ORS=''-v-RS='[-:\“()”'/^[a-zA-Z]/'file.dat此解决方案需要一些调整,我认为需要gawk将regexp作为“记录分隔符”
gawk-v-ORS=''-v-RS='[-:\“()”'/^[a-zA-Z]/'file.dat这可能适合您(GNU-sed):
sed的//[:punct:///g;s/\这可能适合您(GNU-sed):
sed的//[:punct:///g;s/\Aperl
1行程序。它搜索任何字母字符,后跟单词边界中包含的任意数量的单词字符。使用/g
标志为每行尝试几次匹配
填充的内容
:
1.2.3::L2 Traffic-house seen during ABCD from 2.2.4/5.2.3a to 1.2.3.X11
XYZ-2-VRECYY_FAIL: Verify failed - Client 0x880016, Reason: Object exi
ABCMGR-2-SERVICE_CRASHED: Service "abcmgr" (PID 7582) during UPGRADE
Perl
命令:
perl -ne 'printf qq|%s\n|, join qq|_|, (m/\b([[:alpha:]]\w*)\b/g)' infile
输出:
L2_Traffic_house_seen_during_ABCD_from_to_X11
XYZ_VRECYY_FAIL_Verify_failed_Client_Reason_Object_exi
ABCMGR_SERVICE_CRASHED_Service_abcmgr_PID_during_UPGRADE
一个perl
一行程序。它搜索任何字母字符,后跟单词边界中包含的任意数量的单词字符。使用/g
标志为每行尝试几次匹配
填充的内容
:
1.2.3::L2 Traffic-house seen during ABCD from 2.2.4/5.2.3a to 1.2.3.X11
XYZ-2-VRECYY_FAIL: Verify failed - Client 0x880016, Reason: Object exi
ABCMGR-2-SERVICE_CRASHED: Service "abcmgr" (PID 7582) during UPGRADE
Perl
命令:
perl -ne 'printf qq|%s\n|, join qq|_|, (m/\b([[:alpha:]]\w*)\b/g)' infile
输出:
L2_Traffic_house_seen_during_ABCD_from_to_X11
XYZ_VRECYY_FAIL_Verify_failed_Client_Reason_Object_exi
ABCMGR_SERVICE_CRASHED_Service_abcmgr_PID_during_UPGRADE
单向使用awk
,内容为script.awk
:
BEGIN {
FS="[^[:alnum:]_]"
}
{
for (i=1; i<=NF; i++) {
if ($i !~ /^[0-9]/ && $i != "") {
if (i < NF) {
printf "%s_", $i
}
else {
print $i
}
}
}
}
或者,这里是一个班轮:
awk -F "[^[:alnum:]_]" '{ for (i=1; i<=NF; i++) { if ($i !~ /^[0-9]/ && $i != "") { if (i < NF) printf "%s_", $i; else print $i; } } }' file.txt
单向使用awk
,内容为script.awk
:
BEGIN {
FS="[^[:alnum:]_]"
}
{
for (i=1; i<=NF; i++) {
if ($i !~ /^[0-9]/ && $i != "") {
if (i < NF) {
printf "%s_", $i
}
else {
print $i
}
}
}
}
或者,这里是一个班轮:
awk -F "[^[:alnum:]_]" '{ for (i=1; i<=NF; i++) { if ($i !~ /^[0-9]/ && $i != "") { if (i < NF) printf "%s_", $i; else print $i; } } }' file.txt
欢迎来到堆栈溢出。请阅读。在第一个示例中,为什么不包括最后一个到单词?为什么包含L2
而不包含X11
?欢迎使用堆栈溢出。请阅读。在第一个示例中,为什么不包括最后一个到单词?为什么包含L2
,而不包含X11
?