逆引きシェルスクリプト/スペースが含まれる文字列を1行として扱う方法
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#navi(../)
* スペースが含まれる文字列を1行として扱う方法 [#e175fc16]
#contents
一行単位でデータを扱いたいが、シェルの区切り文字がスペー...
尚、使用したシェルはbashになります。
以下のようなデータファイルがあり、スペース区切りで1行に3...
#ref(data.txt)
$ cat data.txt
Fedora Debian Ubuntu
Vine Plamo CentOS
openSUSE KNOPPIX Slackware
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* スペース区切りになっている為、項目毎の表示となる [#n637...
シェルの区切り文字を変更しないと以下のように、項目毎表示...
#ref(test1.sh)
#!/bin/bash
i=0
for L in `cat data.txt`
do
i=`expr $i + 1`
echo $i : $L
done
-上記シェルの実行結果
$ ./test.sh
1 : Fedora
2 : Debian
3 : Ubuntu
4 : Vine
5 : Plamo
6 : CentOS
7 : openSUSE
8 : KNOPPIX
9 : Slackware
本当は3行として出力を期待しているのだが、区切り文字がスペ...
* IFSを変更して区切り文字を改行だけにする [#y44021bd]
IFS(''I''nternal ''F''ield ''S''eparator )に区切り文字...
以下にサンプルスクリプトを記します。
#ref(test2.sh)
#!/bin/bash
IFS_BACKUP=$IFS
IFS=$'\n'
i=0
for L in `cat data.txt`
do
i=`expr $i + 1`
echo $i : $L
done
IFS=$IFS_BACKUP
上記のIFS_BACKUPに変更前の区切り文字設定をバックアップしI...
処理終了後、IFS_BACKUP変数を使用しIFS環境変数の設定を元に...
-上記シェルの実行結果
$ ./test2.sh
1 : Fedora Debian Ubuntu
2 : Vine Plamo CentOS
3 : openSUSE KNOPPIX Slackware
** $'\n'以外の書き方 [#h2c08afb]
以下の2つは同じ意味になります。
IFS=$'\n'
IFS ='
'
上記は直接改行を入力した状態です。
#ref(test3.sh)
#!/bin/bash
IFS_BACKUP=$IFS
IFS='
'
i=0
for L in `cat data.txt`
do
i=`expr $i + 1`
echo $i : $L
done
IFS=$IFS_BACKUP
* 改行区切り文字と他の区切り文字の混在 [#i1048c22]
以下のテストデータを利用し改行の他に他の区切り文字も設定...
#ref(data2.txt)
$ cat data2.txt
Fedora,Debian,Ubuntu
Vine#Plamo#CentOS
openSUSE&KNOPPIX&Slackware
区切り文字を、改行、#、, 、&の4つとした場合は以下のIFS設...
#ref(test4.sh)
#!/bin/bash
IFS_BACKUP=$IFS
IFS='
,&#'
i=0
for L in `cat data2.txt`
do
i=`expr $i + 1`
echo $i : $L
done
IFS=$IFS_BACKUP
-上記シェルの実行結果
$ ./test4.sh
1 : Fedora
2 : Debian
3 : Ubuntu
4 : Vine
5 : Plamo
6 : CentOS
7 : openSUSE
8 : KNOPPIX
9 : Slackware
1行に複数の項目がある場合、IFSの変更により区切り文字を変...
1行として扱いたいと思う事が多いと思います。~
上記のサンプルによりIFSを改行だけと設定すれば簡単にデータ...
また、区切り文字を複数にする方法も記述しました。~
最後にIFSのバックアップは必ず取るようにし、区切り文字の変...
そうしないと、意図しない動作になるかもしれませんので。
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)
終了行:
#navi(../)
* スペースが含まれる文字列を1行として扱う方法 [#e175fc16]
#contents
一行単位でデータを扱いたいが、シェルの区切り文字がスペー...
尚、使用したシェルはbashになります。
以下のようなデータファイルがあり、スペース区切りで1行に3...
#ref(data.txt)
$ cat data.txt
Fedora Debian Ubuntu
Vine Plamo CentOS
openSUSE KNOPPIX Slackware
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* スペース区切りになっている為、項目毎の表示となる [#n637...
シェルの区切り文字を変更しないと以下のように、項目毎表示...
#ref(test1.sh)
#!/bin/bash
i=0
for L in `cat data.txt`
do
i=`expr $i + 1`
echo $i : $L
done
-上記シェルの実行結果
$ ./test.sh
1 : Fedora
2 : Debian
3 : Ubuntu
4 : Vine
5 : Plamo
6 : CentOS
7 : openSUSE
8 : KNOPPIX
9 : Slackware
本当は3行として出力を期待しているのだが、区切り文字がスペ...
* IFSを変更して区切り文字を改行だけにする [#y44021bd]
IFS(''I''nternal ''F''ield ''S''eparator )に区切り文字...
以下にサンプルスクリプトを記します。
#ref(test2.sh)
#!/bin/bash
IFS_BACKUP=$IFS
IFS=$'\n'
i=0
for L in `cat data.txt`
do
i=`expr $i + 1`
echo $i : $L
done
IFS=$IFS_BACKUP
上記のIFS_BACKUPに変更前の区切り文字設定をバックアップしI...
処理終了後、IFS_BACKUP変数を使用しIFS環境変数の設定を元に...
-上記シェルの実行結果
$ ./test2.sh
1 : Fedora Debian Ubuntu
2 : Vine Plamo CentOS
3 : openSUSE KNOPPIX Slackware
** $'\n'以外の書き方 [#h2c08afb]
以下の2つは同じ意味になります。
IFS=$'\n'
IFS ='
'
上記は直接改行を入力した状態です。
#ref(test3.sh)
#!/bin/bash
IFS_BACKUP=$IFS
IFS='
'
i=0
for L in `cat data.txt`
do
i=`expr $i + 1`
echo $i : $L
done
IFS=$IFS_BACKUP
* 改行区切り文字と他の区切り文字の混在 [#i1048c22]
以下のテストデータを利用し改行の他に他の区切り文字も設定...
#ref(data2.txt)
$ cat data2.txt
Fedora,Debian,Ubuntu
Vine#Plamo#CentOS
openSUSE&KNOPPIX&Slackware
区切り文字を、改行、#、, 、&の4つとした場合は以下のIFS設...
#ref(test4.sh)
#!/bin/bash
IFS_BACKUP=$IFS
IFS='
,&#'
i=0
for L in `cat data2.txt`
do
i=`expr $i + 1`
echo $i : $L
done
IFS=$IFS_BACKUP
-上記シェルの実行結果
$ ./test4.sh
1 : Fedora
2 : Debian
3 : Ubuntu
4 : Vine
5 : Plamo
6 : CentOS
7 : openSUSE
8 : KNOPPIX
9 : Slackware
1行に複数の項目がある場合、IFSの変更により区切り文字を変...
1行として扱いたいと思う事が多いと思います。~
上記のサンプルによりIFSを改行だけと設定すれば簡単にデータ...
また、区切り文字を複数にする方法も記述しました。~
最後にIFSのバックアップは必ず取るようにし、区切り文字の変...
そうしないと、意図しない動作になるかもしれませんので。
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)
ページ名: