我试图颠倒在最终输出中排除第一个单词的单词的顺序。例如,我有一个单词/etc/nginx/sites-enabled/
我使用此命令来颠倒顺序
db.in.com.example
我想在输出中排除最后$ basename db.in.com.example | awk -F'.' '{ for (i=NF; i>1; i--) \
printf("%s.",$i); print $1; }'
example.com.in.db
。喜欢这个
.db
我遇到了麻烦。这可以仅使用example.com.in
来完成吗?有人可以帮我吗?
答案 0 :(得分:4)
$ echo db.in.com.example | awk -F. '{ # set . as delimiter
for(i=NF;i>1;i--) # loop from last to next-to-first
printf "%s%s", $i, (i==2?ORS:".") # output item and ORS or . after next-to-first
}'
example.com.in
答案 1 :(得分:2)
如果perl
没问题
$ echo 'db.in.com.example' | perl -F'\.' -lane 'print join ".", reverse(@F[1..$#F])'
example.com.in
$ echo '1.2.3.db.in.com.example' | perl -F'\.' -lane 'print join ".", reverse(@F[2..$#F])'
example.com.in.db.3
-F'\.'
将.
设置为输入字段分隔符并保存到@F
数组reverse(@F[1..$#F])
会提供从索引1
到最后一个索引的反向数组元素
@F[2..$#F]
将排除第一和第二个元素join "."
添加.
作为数组答案 2 :(得分:1)
您可以使用cut
,tac
和参数扩展:
reverse=$(basename db.in.com.example |
cut -d. -f2- --output-delimiter=$'\n' |
tac )
echo ${reverse//$'\n'/.}
答案 3 :(得分:1)
你在这里得到了一些不错的答案。我正在添加一个在我看来更具可读性的,当然如果ruby是你的选择:
$ echo "db.in.com.example" | ruby -ne 'p ($_.strip.split(".").drop(1).reverse.join("."))'
"example.com.in"
答案 4 :(得分:0)
尝试跟随一次,这将反转文本,它允许你从输出中删除任何字符串,不仅仅是db,你只需要更改变量的值,它就应该飞行了。
echo "db.in.com.example" | awk -v var="db" -F"." '{for(i=NF;i>0;i--){val=$i!=var?(val?val FS $i:$i):val};print val;val=""}'
编辑:现在也添加非单行形式的解决方案。
echo "db.in.com.example" | awk -v var="db" -F"." '{
for(i=NF;i>0;i--){
val=$i!=var?(val?val FS $i:$i):val
}
print val;val=""
}'