- PR -

シェルの文字列操作

1
投稿者投稿内容
ゆいな
ベテラン
会議室デビュー日: 2006/01/19
投稿数: 89
投稿日時: 2006-05-02 13:10
お世話になります。
LINUX上のテキストファイルを読み込み、文字列操作をしたいと思います。

ファイルの内容
 secAuthority=Default,cn=testusr001,ou=users,o=aaa,c=jp
 secAuthority=Default,cn=testusr002,ou=users,o=aaa,c=jp
 secAuthority=Default,cn=testusr003,ou=users,o=aaa,c=jp

上記を
 testusr001
 testusr002
 testusr003
のファイルにしたいと思っています。
そこで、以下の通りシェルを作成したのですが
例えば、"testuser 004"のように、スペースがはいっているとうまくいきません・・・
ご教示をお願いします。

for user in `cat ${LDAP_LOG}`
do
# secAuthority=Default,cn=testusr960,ou=users,o=aaa,c=jp
# →
# testusr960,ou=users,o=aaa,c=jp
user=`echo ${user} | sed -e 's/.*cn=//'`

# testusr960,ou=users,o=aaa,c=jp
# →
# testusr960
user=`echo ${user} | sed -e 's/\,.*//'`

echo ${user} >> ${USER_LIST}
done
水都
大ベテラン
会議室デビュー日: 2004/07/22
投稿数: 111
投稿日時: 2006-05-02 13:27
私ならawkで,をデリミタとして2つ目、そこからsedでcn=を消すのを考えましたが

以下の内容ファイル(memo)を用意しました
secAuthority=Default,cn=testusr001,ou=users,o=aaa,c=jp
secAuthority=Default,cn=testusr002,ou=users,o=aaa,c=jp
secAuthority=Default,cn=testusr003,ou=users,o=aaa,c=jp
secAuthority=Default,cn=testusr 004,ou=users,o=aaa,c=jp

# cat memo | awk -F, '{ print $2 }' | sed 's/cn=//g'
testusr001
testusr002
testusr003
testusr 004
ゆいな
ベテラン
会議室デビュー日: 2006/01/19
投稿数: 89
投稿日時: 2006-05-02 13:50
ご回答ありがとうございます。
1行でできるのですね・・・
勉強になります。

引き続き、質問させていただきますが

ファイルの内容
 testusr001
 testusr002
 testusr003
 testusr 004

上記を
 aaa "testusr001" bbb "testusr001"
 aaa "testusr002" bbb "testusr002"
 aaa "testusr003" bbb "testusr003"
 aaa "testusr 004" bbb "testusr 004"
のファイルにしたいと思っています。

こちらも一行でできるものなのでしょうか?
koji
常連さん
会議室デビュー日: 2004/11/04
投稿数: 36
お住まい・勤務地: 北海道
投稿日時: 2006-05-02 14:32
こんな感じ

$ cat foo | awk '{print "aaa ¥"" $1 "¥" bbb ¥"" $1 "¥""}'

¥は半角バックスラ
ゆいな
ベテラン
会議室デビュー日: 2006/01/19
投稿数: 89
投稿日時: 2006-05-02 15:29
ご回答ありがとうございました。
助かりました。

ちなみになのですが、
可変データとして取り扱う事はできるのでしょうか?
DATA1=aaa
DATA2=bbb

単純に
$ cat foo | awk '{print "$DATA1 ¥"" $1 "¥" $DATA2 ¥"" $1 "¥""}'
ではダメでした・・・

koji
常連さん
会議室デビュー日: 2004/11/04
投稿数: 36
お住まい・勤務地: 北海道
投稿日時: 2006-05-02 15:43
すみません

先ほどのだとスペースを含む文字列がある場合は
$1ではなく$0にしないとダメですね。

以下追加
DATA1とかDATA2はシェル変数ですか?
それだったら以下みたいにすれば大丈夫なはず
$ cat foo | awk '{print "'$DATA1' ¥"" $0 "¥" '$DATA2' ¥"" $0 "¥""}'

[ メッセージ編集済み 編集者: koji 編集日時 2006-05-02 16:17 ]
ゆいな
ベテラン
会議室デビュー日: 2006/01/19
投稿数: 89
投稿日時: 2006-05-02 16:39
ご回答ありがとうございました。

教えていただきました方法で、動作を確認しました。
助かりました。

ありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)