![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いつもお世話になっております。
今回は、以下の仕様なシェルを作りたいのですが、お力をお貸しください。
ファイルからある文字列(xxx)を含んだ1文を抽出します。しかしこの1文の1段上に時間が表示されているのですが、この時間も一緒に持って期待と思っています。該当文字列は膨大にあるので時間帯で分けたいと思います。
例:
ファイル名:TEST.txt
yyyy/mm/dd 00:00:00 ←時間帯も抽出したい
AAAAAAA BBBBBBBBBBBBB CCCCC xxx DDDD ←この一文を他のファイルにコピーします。
grep xxx TEST.txt > TEST.log
上記の該当文字列の1段上の時間帯も引っ張りたいのですがどの様にすればよいでしょうか?
宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
> gの意味は何でしょうか?
g は global の意味で、次の /xxx/ と組み合わせて、「すべての xxx を含む行に対して」という意味になります。
. は現在の行番号を表します。前に /xxx/ があるので、/xxx/ を含む行が . になります。".-1,." で「xxx を含む行の一行前から xxx を含む行まで」p で「出力する」ということになります。
> /.-1,.pは該当文字列から-1行を見に行くということで
> 該当文字列から+3行-3行と見に行こうとする場合は、
> どの様に記述すればよいのでしょうか?
その場合は、".-1,." の代わりに".-3,.+3" と書きます。「.+3 から .-3 まで逆順に」ということでしたら、それはちょっと難しいと思います。
なお、その後分かったのですが、ed には -s オプションをつけた方が良いようです。
No.3
- 回答日時:
grep でなく ed でできます。
echo g/xxx/.-1,.p | ed TEST.txt > TEST.log
をお試しください。
ありがとう御座います。
もし宜しければ、echo g/xxx/.-1,.p | ed TEST.txt > TEST.log
の解説をいただきたいのですが。
gの意味は何でしょうか?
/.-1,.pは該当文字列から-1行を見に行くということで
該当文字列から+3行-3行と見に行こうとする場合は、
どの様に記述すればよいのでしょうか?
大変参考になりました。
No.2
- 回答日時:
表題からはずれませんが、ちょっと変化球の回答です。
GNUバージョンのgrepを導入すれば、
# grep -B 1 xxx TEST.txt > TEST.log
で1行前のものも引っ張ってこられます。
Solarisに元々入っているgrepでは出来ません。
GNUバージョンのgrepは、SunFreeware.comなどからバイナリパッケージの形で入手できます。
参考URL:http://www.sunfreeware.com
No.1
- 回答日時:
表題とはずれますが、Perlならこんな感じです。
#!/usr/bin/perl
# 対象ディレクトリ指定
my $dirPath = "/tmp";
# 対象ファイル指定(正規表現で定義)
my $search = $dirPath ."/TEST*";
# 出力ファイル指定
my $outFile = "/tmp/out.txt";
# ディレクトリ内照査
my @files = glob("$search");
# 出力ファイルオープン
open(OUT, ">$outFile");
# 照査結果のファイルについて書き出し
foreach my $file (@files){
open(IN, "$file") || die "FILE OPEN ERROR!!";
my $cnt = 1;
my $line = "";
while(<IN>){
if($cnt){ $line = $_; $cnt = 0;}
if(/xxx/){
print OUT "$line";
print OUT "$_";
last;
}
}
close(IN);
}
#出力ファイルクローズ
close(OUT);
grepを使った処理ではないので、的がずれておりましたら無視してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- その他(ソフトウェア) 一太郎付属の”全件検索”ツールの不具合 3 2023/07/25 15:03
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- フリーソフト テキストファイル内を検索したい 1 2022/06/01 08:33
- Excel(エクセル) Excelの関数でこんな処理ができますか 1 2023/02/08 13:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Linux環境 grepで改行コード(CR...
-
awkを用いて、特定の文字を含む...
-
grepで全角文字の行を抽出
-
grepでの抽出箇所のみ置換して...
-
sed で \\ を含む文字列に置換
-
nawkの使い方について
-
シェルスクリプトで読み込んだ...
-
コマンドの出力結果をn行おきに...
-
grepで日付指定してlogを取り出...
-
特定の文字列を含む行だけ削除...
-
【シェルスクリプト】awkの結果...
-
Dirコマンドでフォルダ内ファイ...
-
TOPコマンドで表示するCPU使用...
-
エクセルの表にヘンな枠が・・・
-
batである文字列内に特定の文字...
-
ラズパイで『’test.service’をs...
-
pingは正常なのにtracerouteで...
-
UNIX コマンドにおける # や円...
-
net use /d の強制実行
-
ファイル名についている「-」と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Linux環境 grepで改行コード(CR...
-
grepで日付指定してlogを取り出...
-
grepで検索文字列が完全一致し...
-
sed で \\ を含む文字列に置換
-
grepで全角文字の行を抽出
-
【シェルスクリプト】awkの結果...
-
bashでブランク(空白)を検索文...
-
awkのフィールド数制限について...
-
フィールドでgrepみたいなこと
-
grepでの抽出箇所のみ置換して...
-
awkコマンドについて
-
zshの文字列置換機能
-
bashなどのシェル変数の値に改...
-
grepで拡張子がxlsxのファイル...
-
テキスト処理を行うツール
-
テキストファイルの間引き削除...
-
awkを用いて、特定の文字を含む...
-
特定の文字列を含む行だけ削除...
-
行頭と行末に文字追加
-
sedの置換での「|」表記
おすすめ情報