質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Red Hat Enterprise

Red Hat Enterpriseは、レッドハット社により開発・サポートが行われている業務向けLinuxディストリビューションです。オープンソースで無償で利用することができ、バイナリ版の入手・サポートは有償です。商用ディストリビューションとして人気が高く、代表的なLinuxの選択肢の一つです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

1回答

1623閲覧

Linux shell 変数の代入とsedの不具合について聞きたい

peasant88

総合スコア6

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Red Hat Enterprise

Red Hat Enterpriseは、レッドハット社により開発・サポートが行われている業務向けLinuxディストリビューションです。オープンソースで無償で利用することができ、バイナリ版の入手・サポートは有償です。商用ディストリビューションとして人気が高く、代表的なLinuxの選択肢の一つです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2017/05/24 02:55

###前提・実現したいこと

Redhat上で動くbash shellを作成しています。
サーバ上のディレクトリに保存されているテキストから、指定した行を抜き出し表示をする機能をもつshellになります。

具体的には、
”Return-Path”というワードを含む行と、10行目、16行目、17行目を抜き出したいです。

コマンド単体として、下記を実行すると問題なく表示されます。

cat /home/starnet/prog/db/db/20170523-224001/2/body |sed -n -e /Return-Path/p -e 10p -e 16,17p

###発生している問題・エラーメッセージ
上記のコマンドを変数としてディレクトリを指定しているシェル内に記述した場合にエラーになり、何も結果が表示されません。

エラーメッセージ
###該当のソースコード

bash

1ここにご自身が実行したソースコードを書いてください 2```#!/bin/sh 3# 4 5cd /home/starnet/prog/db 6 7DATESTR=`date -d '1 days ago' +%Y%m%d` 8 9A=`fgrep "Mail Delivery Subsystem <MAILER-DAEMON@xxxx.co.jp>" summary.0 summary |grep $DATESTR | awk -F: '{print $2}' | awk -F, '{print "/home/xxxx/prog/db/db/" $1 "/body" }'` 10 11cat $A |sed -n -e /Return-Path/p -e 10p -e 16,17p 12 13### 14何かわかる方がいましたら教えていただけませんでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

bash shellを作成するならスクリプトの1行目は次にしないといけないかと。

#!/bin/bash

※見当違いならすみません。エラー内容を記載してもらえるともう少しわかるかもしれません

以下追記

次のコマンドでfgrepすると"Mail Delivery Subsystem MAILER-DAEMON@xxxx.co.jp"を含む行しか次のコマンドに渡さないですが、これは意図した動作ですか?

fgrep "Mail Delivery Subsystem <MAILER-DAEMON@xxxx.co.jp>" summary.0 summary

投稿2017/05/24 03:05

編集2017/05/24 03:12
moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

peasant88

2017/05/24 04:04

ご回答ありがとうございます。 ご指摘いただ抱いた通り、<MAILER-DAEMON@xxxx.co.jp>を含むテキストのみを対象としております。
moonphase

2017/05/24 04:14

<MAILER-DAEMON@xxxx.co.jp>を含む"行"だけを以降のコマンドに渡すことになるのですが、本当に認識あってますでしょうか? fgrepの結果は次のような感じになります。 --- From: Mail Delivery Subsystem <MAILER-DAEMON@xxxx.co.jp> From: Mail Delivery Subsystem <MAILER-DAEMON@xxxx.co.jp> From: Mail Delivery Subsystem <MAILER-DAEMON@xxxx.co.jp> ... --- これを、そもそもの質問にある"”Return-Path”というワードを含む行と、10行目、16行目、17行目を抜き出したいです。"とありますが、 "Return-Path"が含まれる行はないと思います(※Return-Path: Mail Delivery Subsystem <MAILER-DAEMON@xxxx.co.jp>なら一致するでしょうが) また、何行目を取ってきても"Mail Delivery Subsystem <MAILER-DAEMON@xxxx.co.jp>"の行を返すだけになるかと思います。 私が何か勘違いしているのかな・・・?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問