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

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

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

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

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

Q&A

解決済

3回答

1370閲覧

シェルコマンドで、拡張子を抜き出して末尾に追加したい

var

総合スコア20

bash

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

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

0グッド

0クリップ

投稿2020/07/08 06:05

以下のようなリストがパイプで渡ってきます。

text

1memo.txt file01 2photo.jpg file02 3icon.png file03 4video.mp4 file04

これを、以下のようにして次のパイプに渡したいです。
各行で、1つめの文字列から拡張子を抜き出し、2つめの文字列の末尾に付けたいのです。

text

1memo.txt file01.txt 2photo.jpg file02.jpg 3icon.png file03.png 4video.mp4 file04.mp4

awkmatch を使ってどうにかしてみようと思いましたが、ややこしくて分からなくなってしまいました。
お力をお貸しいただければ幸いです。

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

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

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

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

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

yambejp

2020/07/08 06:28

> リストがパイプで渡ってきます ファイルの置換ではなく改行マークを含む 標準入力からの置換ですか?標準出力すればよいのでしょうか?
var

2020/07/08 06:30

はい、標準入力と標準出力でお願いいたします。
guest

回答3

0

こういうのはBashで。

Bash

1#!/bin/bash 2cat <<EOF | 3memo.txt file01 4photo.jpg file02 5icon.png file03 6video.mp4 file04 7EOF 8while read a b;do echo "${a} ${b}.${a##*.}";done

投稿2020/07/08 11:35

otn

総合スコア84557

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

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

var

2020/07/08 12:42

短くて凄いです。じっくり読み解いてみたいと思います。 ご回答ありがとうございました。
guest

0

困ったときのperlだのみ

sh

1cat test.txt | perl -p -e 's/(..+?) (.+$)/\1 \2\1/g'

投稿2020/07/08 06:32

yambejp

総合スコア114843

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

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

var

2020/07/08 06:38

早速ありがとうございます。 実際にやってみたらできました。 こんなに短いコマンドでできるとは驚きです。 とても難解ですが頑張って解読してみます。
yambejp

2020/07/08 06:56

やっていることは「正規表現」というやつなので 時間に余裕があるときに学習してみてください
var

2020/07/08 07:01

ご丁寧にありがとうございます。 回答が早かった方をベストアンサーに選びましたがどちらも同じくらい参考になりました。
guest

0

ベストアンサー

条件が不明なので、一応こちらで条件を決めてやってみました。
条件にによっては正規表現等を変更する必要があります。
・ファイル名は英数字だけで構成されている。
・左側のファイル名には必ず拡張子が付いている。
・sedで「-r」オプションを使っているのでMacに最初から入ってるsedでは動かないと思います。

terminal

1$ cat t.txt 2memo.txt file01 3photo.jpg file02 4icon.png file03 5video.mp4 file04 6$ cat t.txt | sed -r -e 's/^([A-Za-z0-9]+)(.[A-Za-z0-9]+)( .*)$/\1\2\3\2/' 7memo.txt file01.txt 8photo.jpg file02.jpg 9icon.png file03.png 10video.mp4 file04.mp4

※追記
英数字以外のファイル名に対応してみました。

terminal

1$ cat t.txt 2memo.txt file01 3photo.jpg file02 4icon.png file03 5video.mp4 file04 6マニュアル.doc file05 7マニュアル.分類1.doc file06 8$ cat t.txt | sed -r -e 's/^([^ ]+)(.[^ .]+)( .*)$/\1\2\3\2/' 9memo.txt file01.txt 10photo.jpg file02.jpg 11icon.png file03.png 12video.mp4 file04.mp4 13マニュアル.doc file05.doc 14マニュアル.分類1.doc file06.doc

投稿2020/07/08 06:18

編集2020/07/08 06:45
hidezzz

総合スコア1248

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

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

var

2020/07/08 06:42 編集

早速ありがとうございます。 実際にやってみたらできました。 -rオプションはmacOSでは-Eにすれば使えるようでした。 ファイル名は英数字以外にも、macOSで許可されているファイル名なら全ての可能性がありますが、考えるとっかかりとして大変参考になりました。ありがとうございます。
hidezzz

2020/07/08 06:45

英数字以外にも対応させたものを回答に追記しました。
var

2020/07/08 06:55

ありがとうございます。大変助かりました。 目的のことができました。 回答が先だったということもあり、ベストアンサーにさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問