我想将一行分成单词。我知道这可以用这个
完成For word in $line; do echo $word; done
但我想制作3-3个单词组。所以我的问题是,如何在一组3-3个单词中分割一行?
例如
Input : I am writing this line for testing the code.
Output :
I am writing
this line for
testing the code.
答案 0 :(得分:3)
粘贴命令
怎么样?for word in $line; do echo $word; done | paste - - -
for word in $line; do echo $word; done | paste -d" " - - -
答案 1 :(得分:3)
一次阅读三个单词。将正在读取的行设置为余数:
while read -r remainder
do
while [[ -n $remainder ]]
do
read -r a b c remainder <<< "$remainder"
echo "$a $b $c"
done
done < inputfile
答案 2 :(得分:1)
轻松的正则表达式练习。
sed -e "s/\([^\ ]*\ [^\ ]*\ [^\ ]*\)\ /\1\\`echo -e '\n\r'`/g"
唯一棘手的部分是在sed中获得新行,因为没有标准。
$ echo "I am writing this line for testing the code."|sed -e "s/\([^\ ]*\ [^\ ]*\ [^\ ]*\)\ /\1\\`echo -e '\n\r'`/g"
I am writing
this line for
testing the code.
欢迎你。
答案 3 :(得分:1)
只需使用set
将输入设置为位置参数,并以三个为一组进行处理。这样你就不需要任何花哨或特定的东西:
line="I am writing this line for testing the code."
set junk $line
shift
while [ $# -ge 3 ]; do
echo "Three words: $1 $2 $3"
shift 3
done
答案 4 :(得分:0)
有一个非通用的直接解决方案:
#!/bin/bash
path_to_file=$1
while read line
do
counter=1;
for word in $line
do
echo -n $word" ";
if (($counter % 3 == 0))
then
echo "";
fi
let counter=counter+1;
done
done < ${path_to_file}
将其保存在脚本中,为其命名(例如test.sh)并将其设置为执行模式。如果您的文本保存在“myfile.txt”中,请将其命名为:
test.sh myfile.txt
答案 5 :(得分:0)
首先,您可以使用它,将每个单词读入数组
#!/bin/bash
total=0
while read
do
for word in $REPLY
do
A[$total]=$word
total=$(($total+1))
done
done < input.txt
for i in "${A[@]}"
do
echo $i
done
下一步是使用seq
或类似的方法循环遍历数组并以三个为一组进行打印。
答案 6 :(得分:0)
以下是可能解决方案的示例。
#!/bin/bash
line="I am writing this line for testing the code."
i=0
for word in $line; do
((++i))
if [[ $i -eq 3 ]]; then
i=0
echo "$word"
else
echo -ne "$word "
fi
done