sedによる抽出方法をご存知の方、是非教えて下さい。
以下の様なTab区切りのtxtがあったとします。
1 1111 aaaa
2 like bbbb
3 3333 cccc
4 lovelike dddd
5 5555 eeee
6 6666 ffff
ここからloveを含む行の上2行と下1行を出力したいです。
つまりoutputとしては、
2 like bbbb
3 3333 cccc
4 lovelike dddd
5 5555 eeee
となることを期待しています。
sedでなくても良いのですが、Linuxコマンドでこのように抽出する方法はありますでしょうか。
お詳しい方がいらっしゃいましたら、是非ご教示頂ければ幸いです。よろしくお願い致します。
No.4
- 回答日時:
へ~, grep に -w なんてオプションがあるんだ....
「loveの後に何かしら付いているものは抽出されたら困る」ということだけど, 「love の前に何かしらついているもの」は抽出していいんでしょうか?
皆様が実用的なアドバイスを下さったので、次の段階に進めそうです。
が、新しく問題が出現したので、再度投稿させていただこうと思います。
お時間許す限りお付き合い願えればと思います。
よろしくお願い致します。
No.2
- 回答日時:
仕様として・・・
上に2行または下に1行なかったらどうする?
2つ以上のloveがある場合は最初の(最後の?)ヒットだけでよいの?全部だしたいの?
全部出す場合は合致する範囲が競合する場合はどうするの?
No.1
- 回答日時:
>ここからloveを含む行の上2行と下1行を出力したいです。
sedでの方法は知りませんが…
grepの-Aオプションと-Bオプションで処理できませんか?
ありがとうございます。
たしかにできました!!
ところが私が見落としていた問題が一つ発生しました。
実際には以下のような仕様でした。
0 0000 kkkk
1 1111 aaaa
2 lovelike bbbb
3 3333 cccc
4 4444 dddd
5 5555 eeee
6 6666 ffff
7 7777 gggg
8 love hhhh
9 9999 iiiii
10 0000 jjjj
そして希望する出力は
6 6666 ffff
7 7777 gggg
8 love hhhh
9 9999 iiiii
つまり"love"だけ抽出して、love~などのloveの後に何かしら付いているものは抽出されたら困るのです。
grep "love" -A 1 -B 2 inputfile で行うと、lovelikeも部分
0 0000 kkkk
1 1111 aaaa
2 lovelike bbbb
3 3333 cccc
も抽出されてしまいました(泣)
このような場合どのようにすればよいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- Excel(エクセル) VBAで重複データを合算したい(時間) 1 2022/12/08 23:06
- Perl Perlでファイルの末尾から指定文字列を検索してファイルに吐き出したい 4 2022/04/04 16:15
- UNIX・Linux Kali Linuxで起動できない - Minimal BASH Like Line Editing 1 2022/06/03 13:14
- 片思い・告白 「like」と「love」の違いについて 2 2022/11/13 22:32
- Access(アクセス) Access で半角スペースと全角スペースの区別について 3 2022/11/05 23:54
- その他(悩み相談・人生相談) 好きになる、という事が分かりません めちゃくちゃ最低な話ですが、私は昔から1歩引いて関わってしまうた 4 2023/05/18 09:57
- 英語 この英文の意味を教えてください。 1 2022/04/30 20:53
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Linux環境 grepで改行コード(CR...
-
grepで変数が使えない
-
awkのフィールド数制限について...
-
テキストファイルの間引き削除...
-
bashで変数に追記
-
bashでブランク(空白)を検索文...
-
sed で \\ を含む文字列に置換
-
【シェルスクリプト】awkの結果...
-
zshの文字列置換機能
-
grepで全角文字の行を抽出
-
grepで検索文字列が完全一致し...
-
TOPコマンドで表示するCPU使用...
-
Dirコマンドでフォルダ内ファイ...
-
スクリプトのエラー「unexpecte...
-
エクセルの表にヘンな枠が・・・
-
bashでシングルクォート内の変...
-
batである文字列内に特定の文字...
-
SONYの音楽ソフト「x-アプリ」...
-
空きIPアドレスを探す方法
-
[バッチファイル]レジストリ値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Linux環境 grepで改行コード(CR...
-
grepで検索文字列が完全一致し...
-
grepで日付指定してlogを取り出...
-
grepで全角文字の行を抽出
-
sed で \\ を含む文字列に置換
-
zshの文字列置換機能
-
【シェルスクリプト】awkの結果...
-
grepでの日本語検索
-
テキストファイルの間引き削除...
-
コマンドの出力結果をn行おきに...
-
grepでの抽出箇所のみ置換して...
-
フィールドでgrepみたいなこと
-
awkを用いて、特定の文字を含む...
-
bashなどのシェル変数の値に改...
-
行頭と行末に文字追加
-
特定の文字列を含む行だけ削除...
-
特定文字列を除外する方法(gre...
-
LINUXで半角の英数字以外の文字...
-
bashでブランク(空白)を検索文...
-
awkのフィールド数制限について...
おすすめ情報
ありがとうございます。
これはあくまで例で出しので、実際には必ず上に2行、下に1行あります。
その上でどのようにすればよいか教えて頂けますでしょうか。
さらに、loveというのは1行に出現するとすれば1回のみとわかっています。
そしてさらに一度loveが出現したら、次に出現するのは必ずその3行目以降です。ですので、前後の重複はないと考えていただいて大丈夫です。説明不足で申し訳ありません。
loveの前に何かついているものも抽出されたら困るのです(泣)