我希望输出更改如下。
- 包含的行
(GROUP ) R
应该以 sg 开头,并将其替换(GROUP ) R
为props(USERLIST)
- 包含的行
(USER ) R
应以 su 开头,并(USER ) R
从行尾删除 。
文件1.txt
host server1
group1 (GROUP ) R
group2 (GROUP ) R
group3 (GROUP ) R
group4 (GROUP ) R
user1 (USER ) R
user2 (USER ) R
host server2
group5 (GROUP ) R
group6 (GROUP ) R
group7 (GROUP ) R
user3 (USER ) R
user4 (USER ) R
host server3
group8 (GROUP ) R
group9 (GROUP ) R
user5 (USER ) R
user6 (USER ) R
预期输出
host server1
sg group1 props(USERLIST)
sg group2 props(USERLIST)
sg group3 props(USERLIST)
sg group4 props(USERLIST)
su user1
su user2
host server2
sg group5 props(USERLIST)
sg group6 props(USERLIST)
sg group7 props(USERLIST)
su user3
su user4
host server3
sg group8 props(USERLIST)
sg group9 props(USERLIST)
su user5
su user6
答案1
和AWK:
awk '{if( $2 == "(GROUP" ) {print "sg "$1" props(USERLIST)"} else if ( $2 == "(USER" ) {print "su "$1} else print $0}' file1.txt
和SED:
sed -i '/GROUP/ s/.*\(group[0-9]\).*/sg \1 props(USERLIST)/g;/USER/ s/.*\(user[0-9]\).*/su \1/g' file1.txt
答案2
sed -e '/(GROUP ) R/{s//props(USERLIST)/; s/^/sg /;}' \
-e '/(USER ) R/{s///; s/^/su /;}' \
-e 's/[[:blank:]][[:blank:]]*/ /g' file >newfile
这是一个sed
具有三个sed
表达式的命令。
- 对于包含
(GROUP ) R
: 的行,将该字符串替换为props(USERLIST)
并插入sg
到该行的开头。 - 对于包含 的行
(USER ) R
:删除该字符串并插入到su
行的开头。 - 将所有行上的多个连续空白字符替换为一个空格。
结果被写入newfile
,对于给定的输入,输出将是
host server1
sg group1 props(USERLIST)
sg group2 props(USERLIST)
sg group3 props(USERLIST)
sg group4 props(USERLIST)
su user1
su user2
host server2
sg group5 props(USERLIST)
sg group6 props(USERLIST)
sg group7 props(USERLIST)
su user3
su user4
host server3
sg group8 props(USERLIST)
sg group9 props(USERLIST)
su user5
su user6
答案3
sed '/(GROUP[ \t]\+)[ \t]R/s/^.*\(group[[:digit:]]*\).*/sg \1 props(USERLIST)/;/(USER[ \t]\+)[ \t]R/s/.*\(user[[:digit:]]*\).*/su \1/' file1.txt
答案4
与@SivaPrasath的解决方案非常相似,但匹配整体(GROUP/USER ) R
awk '/\(GROUP\s*\) R/ { printf "sg %s props(USERLIST)\n",$1; };
/\(USER\s*\) R/ { printf "su %s\n",$1 }' file1.txt