這篇文章以sed的乙個引數的使用示例進行說明在不同作業系統之下,一些常用的命令或者作業系統內建的功能可能會有所不同,是指令碼程式設計在實際編碼中需要額外注意的事情。
比如希望把如下文字檔案中的greeting_msg使用sed替換成liu miao
[root@liumiaocn ~]# cat test.text
hello greeting_msg to use bash
[root@liumiaocn ~]#
[root@liumiaocn ~]
# cat test.sh
#!/bin/bash
file_txt=test.text
words_replace_src=
"greeting_msg"
words_replace_dst=
"liu miao"if[
! -f $];
then
echo
"file $file_txt does not exist"
exit 1
fiecho
"before sed -i "
cat$file_txt
echo
sed -i s@"$"@"$"@g $file_txt
echo
"after sed -i "
cat$file_txt
[root@liumiaocn ~]
#
[root@liumiaocn ~]# cat /etc/redhat-release
centos linux release 7.7.1908 (core)
[root@liumiaocn ~]# sh test.sh
before sed -i
hello greeting_msg to use bash
after sed -i
hello liu miao to use bash
[root@liumiaocn ~]#
同樣的**和準備在macos下的執行結果如下所示:
liumiaocn:~ liumiao$ sw_vers
productname: mac os x
productversion: 10.15.2
buildversion: 19c57
liumiaocn:~ liumiao$
liumiaocn:~ liumiao$ cat test.text
hello greeting_msg to use bash
liumiaocn:~ liumiao$ sh test.sh
before sed -i
hello greeting_msg to use bash
sed: 1: "test.text"
: undefined label 'est.text'
after sed -i
hello greeting_msg to use bash
liumiaocn:~ liumiao$
可以看到sed執行出錯,這是因為在macos上的sed在使用-i引數的時候需要額外指定乙個標籤用於備份原始檔,設定為空就不會備份,將**做如下修改即可:
liumiaocn:~ liumiao$ cp test.sh test.sh.org
liumiaocn:~ liumiao$ vi test.sh
liumiaocn:~ liumiao$ diff test.sh test.sh.org
16c16
< sed -i "" s@"$"@"$"@g $file_txt
---> sed -i s@"$"@"$"@g $file_txt
liumiaocn:~ liumiao$
再次執行就會成功
liumiaocn:~ liumiao$ sh test.sh
before sed -i
hello greeting_msg to use bash
after sed -i
hello liu miao to use bash
liumiaocn:~ liumiao$
通過sed的-i引數在不同平台上的執行方式不同,如果需要在多個平台上進行相容的情況下,或者將**進行移植的情況下,都需要考慮,最好的方式當然還是使用posix的規範之內的部分,此部分之外的情況則需要多多考慮,很多常用的命令在不同平台下的表現可能會相差較大,這部分情況有時使用gnu版本的功能也是乙個經常性的選擇。 考量作業系統相容性
最近為了使程式能執行在windows xp 和windows 7上,對原有 進行了改造,include stdafx.h include include using namespace std define define known folder name,l,w1,w2,b1,b2,b3,b4,b...
ionic4之android系統相容性問題
由於官方外掛程式ordova ionic web view 2.x.x只能在android7.1 以上的系統正常執行,所以一般這樣打包出來的apk在更早之前的android系統中執行時會出現白屏的情況。ionic build ionic cordova platform add android co...
關於NiosII和Win7系統相容性的問題處理方式
前一陣子在研究niosii的使用時,發現niosii和win7旗艦版系統相容的非常的差,以至於產生了為了學習niosii而將旗艦版系統換成xp系統的衝動 今天從實驗室回到寢室,吃完飯,百無聊賴中忽然猛發發了乙個年念頭 win7系統在處理相容性問題的時候,總是會建議將旗艦版的透明模式轉換成win7經典...