linux - 用适当数量的 "*"替换偶数词

标签 linux bash

我需要输入一些行数,用适当数量的“*”替换偶数行上的所有单词并将结果输出到屏幕。

例如输入:

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/

相关文章:

c++ - 一种管理客户端在 C 套接字中突然断开连接的好方法

c - Eclipse CDT - 无法解析符号 `__RLIMIT_NPROC`

java - maven shade plugin 会在 Windows 上自动缩小包名吗?

linux - 在不使用 "mv"(shell 脚本)的情况下,将当前目录中的新 TAR 文件创建到新目录

Bash: "xargs cat",在每个文件后添加换行符

arrays - 为什么 AWK 不将此数组索引视为数字,除非我使用 int()?

linux - Bash Shell脚本:将文本追加到现有文件的特定行中,而不会出现换行符

linux - 如何在我的终端中默认更改目录? (命令行)

bash - 为什么主管找不到命令源

bash - 尝试格式化音乐文件的名称