2

ファイルから行の特定の部分を抽出するのに助けが必要です。

私のファイルは次のようになります。

testfile.txt
This is a test line 1 $#%#
This is a test line 2 $#%#
This is a test line 3 $#%#
This is a test line 4 $#%#
This is a test line 5 $#%#
This is a test line 6 $#%#
This is a test line 7 $#%#

ここに私のbashスクリプトがあります:

#!/bin/bash

while read line
do
#echo $line
FilterString=${line:22:26}
echo $FilterString>>testfile2.txt
done<testfile.txt

上記のスクリプトは文字列$#%#を取得し、一時ファイルに書き込みます

私の質問:

文字列を書き込む代わりに、文字列$#%#以外のすべてを$#%#ファイルに書き込みます。だから私は私の最終的な出力ファイルを次のようにしたい:

testfile.txt
This is a test line 1 
This is a test line 2 
This is a test line 3 
This is a test line 4 
This is a test line 5 
This is a test line 6 
This is a test line 7 

それを行うのに最適なツールも教えてください

前もって感謝します。

4

6 に答える 6

1

あなたはとても親しかった:

FilterString=${line:0:22}

または、ゴミをフィルタリングするだけです:

FilterString=${line% \$#%#}
于 2013-10-28T09:40:09.703 に答える
1

Instead of writing the string "$#%#" i want everything except string "$#%#" written to file.

sed inline を使用して実行できます。

sed -i.bak 's/ *\$#%#//g' testfile.txt
于 2013-10-28T09:30:59.340 に答える
0

皆さんのすべての回答に感謝します:

@devnull の回答に基づいてスクリプトを使用します。

#!/bin/bash
while read line
do
#echo $line
#FilterString=${line:22:26}
echo $line | cut -b1-20,27- >>testfile2.txt
done<testfile

したがって、ファイルが次のように見える場合

testfile.txt
This is a test line 1 $#%# more text
This is a test line 2 $#%# more text
This is a test line 3 $#%# more text
This is a test line 4 $#%# more text
This is a test line 5 $#%# more text
This is a test line 6 $#%# more text
This is a test line 7 $#%# more text

出力は次のようになります。

testfile2.txt
This is a test line  more text
This is a test line  more text
This is a test line  more text
This is a test line  more text
This is a test line  more text
This is a test line  more text
This is a test line  more text

これはまさに私が欲しかったものです

于 2013-10-28T10:19:20.527 に答える