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

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

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

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

Linux

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

Q&A

解決済

1回答

2433閲覧

ShellScriptで空白を改行に変換したい、且つ出力した内容を引数として他ファイルに渡して出力できるようにしたい

S.K1994

総合スコア34

bash

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

Linux

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

0グッド

0クリップ

投稿2019/03/16 13:50

編集2019/03/16 14:32

前提・実現したいこと

現在shellでファイル1の内容をファイル2から呼び出し、その出力結果を引数としてファイル3に渡し、ファイル3から出力を行うシステムを構築しています。

発生している問題・エラーメッセージ

現在発生している問題は2点です。

1:ファイル2からファイル1の出力を行う際に、出力内容を見やすくするために数値の後ろの空白で改行を行いたいですが数値がかけてしまいうまく出力できない状態です。

2:ファイル3(command.sh)へ値を渡したいのですがどのようにすればいいか見当がつかない状態です。(渡せる引数の個数が変わった場合でも対応できる形にしたい)

該当のソースコード

ファイル1 (f1.sh)

#!/bin/sh ls cd ls ls echo containerAcronym:GORGIA echo aiueo echo kakikukeko echo containerService:012345 ls ls ls echo containerAcronym:ajijijv echo containerService:758472890 ls ls ls ~ コード

ファイル2(f2.sh)

#!/bin/sh if [ `whoami` != root ] then echo "root" exit 1 else A=`./f1.sh | grep -oP '(containerAcronym|containerService):\K.*'` echo $A | sed 's/[0-9] /\n/g' fi ソースコード

ファイル3(command.sh)

#!/bin/bash echo $1 $2 コード

./f2の出力結果が

GORGIA 01234 ajijijv 75847289 #最後の数字がかけてしまう。 コード

それとcommand.shに値を渡して、./command.shで出力できる状態にしたいです。

お力添えいただけると助かります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

1.
「数字と空白」を「改行」に置換しているので、「数字」が欠けて当然です。
sed 's/([0-9]) /\1\n/'g
括弧でキャプチャして、後方参照を使い、キャプチャしたものを残します。

2.
command.shの役目は?f2.shの出力でなにが足りないのでしょうか?
#追記
引数を2つずつペアにして、1行に表示します。

Bash

1while [ "$1" ] 2do echo $1 $2 3 shift 2 4done

投稿2019/03/16 21:56

編集2019/03/17 11:41
otn

総合スコア84553

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

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

S.K1994

2019/03/17 07:29

足りないというよりも、これからいくつかのファイルからの出力内容を./command.shで出力できるようにするシステムを作成する必要に迫られているのでお聞きしたいというのが理由です。 今回shellを初めて扱うのですが、なにぶん知識不足なのでotuさんのように知識の豊富な方にお力添えいただけると助かります。
otn

2019/03/17 09:35

単に、command.shからf2.shを起動するだけでいいのでは?
S.K1994

2019/03/17 09:51

あくまでcommand.shの引数に渡さなければいけないのでcommand.shからf2.shを呼び出すというものではだめです。
otn

2019/03/17 09:55

command.shの意味が分からない。 引数を出力すると言うことなら、質問文のコードで合ってます。それで何がまずいのですか?
S.K1994

2019/03/17 09:56

理由については、そのような仕様としか言いようがないです。
otn

2019/03/17 09:58

では、今回の質問は全部完了と言うことですね。続いているのかと思った。
S.K1994

2019/03/17 10:01

例えば command.sh $1(GORGIA) $2(012345) $3(ajijijv) $4(758472890) ./command.sh GORGIA 012345 ajijijv 758472890 というように引数を渡して出力ができるようにしなければいけないのです。 本番ではf2.shがcommand.shに渡す引数の個数が幾つになるかわからないので、引数の個数がいくつでも対応できるような状況にしたいのです。 echo ./f2.sh という形ですと、おっしゃるとおり出力自体は問題がないのですが、、 あくまで引数としてf2.shの値をcommand.shに渡さなければいけないという要件があるので、意味がわからないというご意見もわかるのですが、、
S.K1994

2019/03/17 10:02

勝手に完了にしないでください
otn

2019/03/17 10:11 編集

意味がわからないというのは、何故そういう仕様になっているのかの理由が分からないという意味じゃなくて、どういう仕様なのかが、伝わってこないという意味です。 なので、回答しようがない。そこで、 > 質問文のコードで合ってます。それで何がまずいのですか? と聞いたわけですが、それに対して、 > そのような仕様としか言いようがないです。 ということだったので、質問文のcommand.shで完成という意味と解釈しました。 例を見ると、「引数を1行に2個ずつ表示したい」ということですかね? それを最初から聞いているのに。
S.K1994

2019/03/17 10:21

えーっとですね、 こちらの説明が不足していて申し訳ございません。 今一度説明させてください。 f1.sh ←こちらに関しては、本番では、文字列と数値の組み合わせがいくつでてくるかわからない状態です。 その他無駄なコードなどがある状態。 f2.sh ←こちらはf1.shの中から特定の文字列と数値を取り出し、 文字列+数値 文字列+数値 文字列+数値 ・ ・ ・ というように文字列+数値を1行1行出力していくようにしていきます。 こちらの内容は、otnさんのご回答のおかげで解決しました。ありがとうございます。 command.sh ←こちらでは、主にf2.shの文字列と数値を引数として受け、otnさんのおっしゃるように 「引数を1行に2個ずつ表示したい」です。 ただ出力すればいいというわけではなく、command.sh内の引数に入れて出力できねばなりません。 command.sh $1 $2 の$1と$2という引数に文字列、数値それぞれ値を入れて、 ./command.sh と打つと 文字列+数値 文字列+数値 文字列+数値 ・ ・ ・ というようにf2.shと同じように出力できねばなりません。 こちらの説明で不足の場合はなんなりとご指摘ください。
otn

2019/03/17 10:24

> ./command.sh と打つと だと、引数無しなので、なにも表示しないのでは?
S.K1994

2019/03/19 11:01

追記ありがとうございます。 参考にさせていただいた上で完成することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問