Sed 打印中间有u的有效单词

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

我已经做了研究,但没有找到解决问题的办法。 我试图提取字符串中的所有有效单词(以字母开头),并用下划线(“\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-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/\A
perl
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