我想把一行分成单词。我知道这可以用这个来完成
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.
我想把一行分成单词。我知道这可以用这个来完成
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.
一次读三个单词。将要读取的行设置为余数:
while read -r remainder
do
while [[ -n $remainder ]]
do
read -r a b c remainder <<< "$remainder"
echo "$a $b $c"
done
done < inputfile
粘贴命令呢
for word in $line; do echo $word; done | paste - - -
for word in $line; do echo $word; done | paste -d" " - - -
简单的正则表达式练习。
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.
别客气。
只需使用set
将您的输入设置为位置参数,并以三个为一组进行处理。这样你就不需要任何花哨或特定于 bash 的东西:
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
有一个非通用的直接解决方案:
#!/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
作为开始,您可以使用它,它将每个单词读入一个数组
#!/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
或类似的方法循环遍历数组并以三个为一组进行打印。
这是可能解决方案的示例。
#!/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