在bash中将一行分为单词

时间:2012-06-26 12:14:33

标签: bash

我想将一行分成单词。我知道这可以用这个

完成
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.  

7 个答案:

答案 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