1

少なくとも 1 つの一致するフレーズを含むファイル内のすべての行をファイルの末尾に移動するにはどうすればよいですか? 例:ファイル:

Do you like to read books?
Yes, do you like to watch movies?
No, but the fish does.

検索フレーズが「book」と「movie」の場合、上記の最初の 2 行はファイルの末尾に移動します。たとえば、次のようになります。

No, but the fish does.
Do you like to read books?
Yes, do you like to watch movies?
4

3 に答える 3

3

ここに手っ取り早く汚れた方法があります:

(grep -v -e movie -e book file; grep -e movie -e book file) >newfile
于 2012-09-14T02:14:03.837 に答える
1

これはあなたが探しているものですか?

grep "match1|match2" input.txt > tmp1
grep -v "match1|match2" input.txt > tmp2
cat tmp2 tmp1 > output.txt
rm tmp1 tmp2

または、ケビンが指摘したように、一時ファイルを使用せずに:

cat <(grep "match1|match2" input.txt) <(grep -v "match1|match2" input.txt) > output.txt
于 2012-09-14T02:14:55.287 に答える
1

完全なbashでの別の方法は次のとおりです。

#!/bin/bash -
declare -a HEAD
declare -a BOTTOM

while read -r line
do
        case "$line" in
                *book*|*movie*)
                        BOTTOM[${#BOTTOM[*]}]="${line}";
                        ;;
                *)
                        HEAD[${#HEAD[*]}]="${line}";
                ;;
        esac    # --- end of case ---
done < "$1"

for i in "${HEAD[@]}" "${BOTTOM[@]}"; do echo $i; done
于 2012-09-14T11:51:48.683 に答える