我需要输入一些行数,用适当数量的“*”替换偶数行上的所有单词并将结果输出到屏幕。
例如输入:
Hi! How are you?
It's been a while since we've met.
会给我们:
Hi! *** are ****
It's **** a ***** since ***** met.
这是我尝试过的:
#!/bin/bash
res=""
mm="*"
i=0
while IFS= read -r line; do
for word in line
do
tmp=""
lng=${#word}
if [ $(($lng % 2)) -eq 0 ];
then
while [ $i -lt $lng ]; do
tmp=$tmp$mm
let i=i+1
done
res+=${tmp}
else
res+=${word}
fi
done
done
echo -e "${res}"
但是它并没有做它应该做的事情(
有什么建议吗?
最佳答案
作为 perl 的一行代码:
$ echo "Hi! How are you?\nIt's been a while since we've met." \
| perl -pe 's/\S+\s+\K(\S+)/"*" x length($1)/eg'
Hi! *** are ****
It's **** a ***** since ***** met.
基本上,对于每对由空格分隔的单词,用与其长度相等的星号替换第二个单词。
关于linux - 用适当数量的 "*"替换偶数词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58679426/