5

这是一个脚本,它从replaced.txt 文件中读取单词并在每一行中显示每个单词的输出,但我想在一行中显示所有输出。

#!/bin/sh
 回声
 echo "输入要翻译的单词"
 读一个
IFS=" " # 设置字段分隔符
set $a # 将字符串分解为 $1, $2, ...
for a # 一个 for 循环默认循环通过 $1, $2, ...
    做
    {
    b= grep "$a" 替换.txt | 剪切 -f 2 -d" "
    }
    完毕

“replaced.txt”文件的内容如下:

你好你好
米上午
rshbh 里沙布
耆那教
怎么样
ws WAS
你的
第一天

这个问题不适合我问的问题,我只需要帮助将脚本的输出放在一行中。

4

3 回答 3

9

您的整个脚本可以替换为:

#!/bin/bash
echo
read -r -p "Enter the words to be translated: " a
echo $(printf "%s\n" $a | grep -Ff - replaced.txt | cut -f 2 -d ' ')

不需要循环。

带有不带引号的echo参数删除嵌入的换行符并用一个空格替换多个空格和/或制表符的每个序列。

于 2012-05-24T03:37:29.833 回答
2

从命令的输出中删除尾随换行符的一种简单但简单的方法是将其包装在printf %s "$(...) ". 也就是说,你可以改变这个:

b= grep "$a" replaced.txt | cut -f 2 -d" "

对此:

printf %s "$(grep "$a" replaced.txt | cut -f 2 -d" ") "

echo并在循环完成后添加一个命令。

$(...)符号设置了“命令替换”:命令grep "$a" replaced.txt | cut -f 2 -d" "在子shell 中运行,其输出(减去任何尾随换行符)被替换到参数列表中。因此,例如,如果命令输出DAY,那么上面的内容等价于:

printf %s "DAY "

(该printf %s ...符号等价于echo -n ...- 它输出一个字符串而不添加尾随换行符 - 只是它的行为更加便携一致,并且如果您要打印的字符串恰好以-nor-e或之类的开头,它也不会出现错误行为。)

于 2012-05-23T17:41:53.527 回答
1

你也可以使用

awk 'BEGIN { OFS=": "; ORS=" "; } NF >= 2 { print $2; }'

在切割后的管道中。

于 2012-05-25T05:15:12.330 回答