1. 程式人生 > >sed shell 變數替換 變數含有空格以及單引號問題

sed shell 變數替換 變數含有空格以及單引號問題

首先假設我想要echo 一個string帶有單引號怎麼實現呢?

[[email protected] ~]# echo '1'
1

[[email protected] ~]# echo "\'1\'"
\'1\'

[[email protected] ~]# echo ''\''1'\'''
'1'

但是假如我在shell中以變數的形式傳遞呢?

看下面的指令碼

[[email protected] freshexp]# more sedexptry.sh 
#!/bin/bash
file=$1          #export file
mapping=$2       #mapping config
while IFS="|" read flag old new
do
    echo "flag is "$flag
    echo $old
    echo $new
    sed s/"\($flag  ..\?\)  $old"/"\1  $new"/ $file > $file.tmp
done<$mapping
[
[email protected]
freshexp]# more mapping.cfg asselv|'1'|'11111' [[email protected] freshexp]# sh -x sedexptry.sh test.txt mapping.cfg + file=test.txt + mapping=mapping.cfg + IFS='|' + read flag old new + echo 'flag is asselv' flag is asselv + echo ''\''1'\''' '1' + echo ''\''11111'\''' '11111' + sed 's/\(asselv ..\?\) '\''1'\''/\1 '\''11111'\''/' test.txt + IFS='|' + read flag old new [
[email protected]
freshexp]#


看到沒,他的echo竟然是echo ''\''1'\'''

然後在sed中竟然是sed 's/\(asselv  ..\?\)  '\''1'\''/\1  '\''11111'\''/' test.txt

其實我想要的是        sed s/"\(asselv  ..\?\)  '1'"/"\1  '11111'"/ test.txt

其實我的目的是想將檔案

+0000000000000060496.,+0000000000000009017.,20130101,"1","quarav","  loandt  >  '$elquar'",,"quarav"
+0000000000000060498.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060499.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060500.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060501.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060502.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '5'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060503.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060504.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060505.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd 
 in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060506.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060507.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '5'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"

中的asselv  =  '1'   替換為 asselv  =  '1003'

在不能解決上面的單引號的問題的時候我想了另一種解決方法:

[[email protected] freshexp]# more sedexport.sh 
#!/bin/bash
file=$1          #export file
mapping=$2       #mapping config
while IFS="|" read flag old new
do
    echo $flag
    echo $new
    sed s/"\($flag  ..\?  '\)$old"/"\1$new"/ $file > $file.tmp
    mv $file.tmp $file
done<$mapping

一開始執行的不錯,但是後來發現了問題,很隱蔽,看一下執行之後的檔案就能想到錯誤錯在哪裡
[[email protected] freshexp]# more test2.txt
+0000000000000060496.,+0000000000000009017.,20130101,"1","quarav","  loandt  >  '$elquar'",,"quarav"
+0000000000000060498.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '11111'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060499.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060500.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '11111003'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060501.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060502.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '55555'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060503.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '11111'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060504.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060505.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '11111003'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060506.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060507.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '55555'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
[[email protected] freshexp]# ^C
[[email protected] freshexp]# 
mapping檔案如下
[[email protected] freshexp]# more mapping2.cfg 
asselv|1|11111
asselv|5|55555
[[email protected] freshexp]# 

看來還是的精確生成如下的sed才行
sed s/"\(asselv  ..\?\)  '1'"/"\1  '11111'"/ test.txt

但是裡面的單引號讓我頭疼不已!!!!

----一個小測試:

[[email protected] freshexp]# message="a b c"
[[email protected] freshexp]# echo $message 
a b c
[[email protected] freshexp]# URL="http://1.1.1.1/1.php?message=MESSAGE&receiver=RECEIVER"
[[email protected] freshexp]# echo $URL
http://1.1.1.1/1.php?message=MESSAGE&receiver=RECEIVER
[[email protected] freshexp]# echo $URL|sed “[email protected]@[email protected]”|sed “[email protected]@[email protected]”^C
[[email protected] freshexp]# ^C
[[email protected] freshexp]# echo $URL|sed "[email protected]@[email protected]"
http://1.1.1.1/1.php?message=a b c&receiver=RECEIVER
[[email protected] freshexp]# a="'1'"
[[email protected] freshexp]# echo $a
'1'
[[email protected] freshexp]# b="sssss'1'ssss"
[[email protected] freshexp]# echo $b
sssss'1'ssss
[[email protected] freshexp]# echo $b|sed "s/$a/4"
sed:-e 表示式 #1,字元 7:未終止的“s”命令
[[email protected] freshexp]# echo $b|sed "s/$a/4/"
sssss4ssss
[[email protected] freshexp]# aa="'2'"
[[email protected] freshexp]# echo $b|sed "s/$a/$aa/"
sssss'2'ssss
[[email protected] freshexp]# 
[[email protected] ~]# message="a b c"
[[email protected] ~]# receiver="aa"
[[email protected] ~]# URL="http://1.1.1.1/1.php?message=MESSAGE&receiver=RECEIVER"
[[email protected] ~]# echo $URL|sed [email protected]@"$message"@|sed [email protected]@[email protected]
http://1.1.1.1/1.php?message=a b c&receiver=aa
[[email protected] ~]# echo $URL|sed "[email protected]@[email protected];[email protected]@[email protected]"
http://1.1.1.1/1.php?message=a b c&receiver=aa
[[email protected] ~]# sed 'N;N;s/"//g;s/message=\(.*\)\nreceiver=\(.*\)\nURL=\(.*\)MESSAGE\(.*\)RECEIVER/\3\1\4\2/' a
http://1.1.1.1/1.php?message=a b c&receiver=aa

[[email protected] ~]# more a
message="a b c"
receiver="aa"
URL="http://1.1.1.1/1.php?message=MESSAGE&receiver=RECEIVER"

[[email protected] ~]# 



莫名其妙的問題好像解決了,詳細如下
[[email protected] freshexp]# sh -x sedexptry13.sh test2.txt mapping.cfg 
+ file=test2.txt
+ mapping=mapping.cfg
+ IFS='|'
+ read flag old new
+ echo 'flag is asselv'
flag is asselv
+ echo ''\''1'\'''
'1'
+ echo ''\''11111'\'''
'11111'
+ sed 's/\(asselv  ..\?\)  '\''1'\''/\1  '\''11111'\''/' test2.txt
+ IFS='|'
+ read flag old new
[[email protected] freshexp]# more test2.txt.tmp 
+0000000000000060496.,+0000000000000009017.,20130101,"1","quarav","  loandt  >  '$elquar'",,"quarav"
+0000000000000060498.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '11111'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060499.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060500.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060501.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060502.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '5'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060503.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '11111'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060504.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060505.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060506.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060507.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '5'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
[[email protected] freshexp]# more sedexptry13.sh 
#!/bin/bash
file=$1          #export file
mapping=$2       #mapping config
while IFS="|" read flag old new
do
    echo "flag is "$flag
    echo $old
    echo $new
    #sed s/"\($flag  ..\?\)  "$old""/"\1  "$new""/ $file > $file.tmp
    sed "s/\($flag  ..\?\)  $old/\1  $new/" $file > $file.tmp 
done<$mapping
[[email protected] freshexp]# 
[[email protected] freshexp]# more test2.txt
+0000000000000060496.,+0000000000000009017.,20130101,"1","quarav","  loandt  >  '$elquar'",,"quarav"
+0000000000000060498.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060499.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060500.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060501.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060502.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '5'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060503.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060504.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060505.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060506.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060507.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '5'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
[[email protected] freshexp]# 


現在正式重新測試:
[[email protected] freshexp]# cp sedexptry13.sh sedexptry14.sh
[[email protected] freshexp]# chmod 777 *
[[email protected] freshexp]# more sedexptry14.sh 
#!/bin/bash
file=$1          #export file
mapping=$2       #mapping config
while IFS="|" read flag old new
do
    echo "flag is "$flag
    echo $old
    echo $new
    #sed s/"\($flag  ..\?\)  "$old""/"\1  "$new""/ $file > $file.tmp
    sed "s/\($flag  ..\?\)  $old/\1  $new/" $file > $file.tmp 
    mv $file.tmp $file
done<$mapping
[[email protected] freshexp]# vi mapping.cfg 


asselv|'1'|'11111'
asselv|'5'|'55555'
[[email protected] freshexp]# more test2.txt
+0000000000000060496.,+0000000000000009017.,20130101,"1","quarav","  loandt  >  '$elquar'",,"quarav"
+0000000000000060498.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060499.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060500.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060501.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060502.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '5'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060503.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060504.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060505.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060506.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060507.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '5'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
[[email protected] freshexp]# sh -x sedexptry14.sh test2.txt mapping.cfg 
+ file=test2.txt
+ mapping=mapping.cfg
+ IFS='|'
+ read flag old new
+ echo 'flag is asselv'
flag is asselv
+ echo ''\''1'\'''
'1'
+ echo ''\''11111'\'''
'11111'
+ sed 's/\(asselv  ..\?\)  '\''1'\''/\1  '\''11111'\''/' test2.txt
+ mv test2.txt.tmp test2.txt
+ IFS='|'
+ read flag old new
+ echo 'flag is asselv'
flag is asselv
+ echo ''\''5'\'''
'5'
+ echo ''\''55555'\'''
'55555'
+ sed 's/\(asselv  ..\?\)  '\''5'\''/\1  '\''55555'\''/' test2.txt
+ mv test2.txt.tmp test2.txt
+ IFS='|'
+ read flag old new
[[email protected] freshexp]# more test2.txt 
+0000000000000060496.,+0000000000000009017.,20130101,"1","quarav","  loandt  >  '$elquar'",,"quarav"
+0000000000000060498.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '11111'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060499.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060500.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060501.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060502.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '55555'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060503.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '11111'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060504.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060505.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060506.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060507.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '55555'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
[[email protected] freshexp]# 

接著執行:
[[email protected] freshexp]# sh -x sedexptry14.sh test2.txt mapping.cfg 
+ file=test2.txt
+ mapping=mapping.cfg
+ IFS='|'
+ read flag old new
+ echo 'flag is asselv'
flag is asselv
+ echo ''\''1'\'''
'1'
+ echo ''\''11111'\'''
'11111'
+ sed 's/\(asselv  ..\?\)  '\''1'\''/\1  '\''11111'\''/' test2.txt
+ mv test2.txt.tmp test2.txt
+ IFS='|'
+ read flag old new
+ echo 'flag is asselv'
flag is asselv
+ echo ''\''5'\'''
'5'
+ echo ''\''55555'\'''
'55555'
+ sed 's/\(asselv  ..\?\)  '\''5'\''/\1  '\''55555'\''/' test2.txt
+ mv test2.txt.tmp test2.txt
+ IFS='|'
+ read flag old new
[[email protected] freshexp]# more test2.txt 
+0000000000000060496.,+0000000000000009017.,20130101,"1","quarav","  loandt  >  '$elquar'",,"quarav"
+0000000000000060498.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '11111'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060499.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060500.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060501.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060502.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '55555'  and     fnpdcd  in  ('C01000000','C02000000','C03000000','C04000000')",,"lastbl"
+0000000000000060503.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '11111'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060504.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '2'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060505.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '1003'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060506.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '4'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
+0000000000000060507.,+0000000000000009019.,20120101,"1","lastbl","  asselv  =  '55555'  and     fnpdcd  in  ('C05000000','C06000000','C07000000')",,"lastbl"
[[email protected] freshexp]# 

OK,解決!!!!

草稿:

    sed 's/"\($flag  ..\?\)  '$(echo $old)'"/"\1  '$(echo $new)'"/' $file > $file.tmp

sed "s/\(asselv  ..\?  '\)1/\111111/" test.txt

sed "s/\($flag  ..\?\)  '1'/\1  '11111'/" test.txt


sed "s/\($flag  ..\?\)  $old/\1  $new/" test.txt

#!/bin/bash
file=$1          #export file
mapping=$2       #mapping config
while IFS="|" read sou tar
    do
    echo $sou
    echo $tar
    sed s/$sou/$tar/ $file > $file.temp
done<$mapping

"\(asselv  ..\?\)  '1'"   |    "\1  '11111'"


    


"\\(asselv  ..\\?\\)  \'1\'"|"\\1  \'11111\'"






"\(asselv  ..\?\)  '\''1'\''"-------------/"\1  '\''11111'\''"/' test.txt




[[email protected] test]$ vi 
+ file=test.txt
+ mapping=mapping3.cfg
+ IFS='|'
+ read sou tar
+ sed 's/"\(asselv  ..\?\)  '\''1'\''"/"\1  '\''11111'\''"/' test.txt
+ IFS='|'
+ read sou tar
[[email protected] test]$ more mapping3.cfg 
"\\(asselv  ..\\?\\)  \'1\'"|"\\1  \'11111\'"
[[email protected] test]$ 




-----
[[email protected] test]$ sh -x sedexporttry.sh test.txt mapping3.cfg 
+ file=test.txt
+ mapping=mapping3.cfg
+ IFS='|'
+ read sou tar
+ echo '"\(asselv' '..\?\)' ''\''1'\''"'
"\(asselv ..\?\) '1'"
+ echo '"\1' ''\''11111'\''"'
"\1 '11111'"
+ sed 's/"\(asselv' '..\?\)' ''\''1'\''"/"\1' ''\''11111'\''"/' test.txt
sed:-e 表示式 #1,字元 11:unterminated `s' command
+ IFS='|'
+ read sou tar
[[email protected] test]$ 






"\\(asselv\ \ ..\\?\\)  \'1\'"|"\\1\ \ \'11111\'"








sed 's/"\(asselv' '..\?\)' '----'\''1'\'---'"/"\1' ''\''11111'\''"/' test.txt










+ sed 's/"\(asselv' '..\?\)' ''\''1'\''"/"\1' ''\''11111'\''"/' test.txt
sed:-e 表示式 #1,字元 11:unterminated `s' command
+ IFS='|'
+ read sou tar
[[email protected] test]$ more mapping6.cfg 
"\\(asselv\ \ ..\\?\\)  \'1\'"|"\\1\ \ \'11111\'"
[[email protected] test]$ 

sed "s/"\($flag  ..\?\)  $old"/"\1  $new"/g" $file > $file.tmp

sed s/"\(asselv  ..\?\)  '1'"/"\1  '11111'"/ test.txt

sed s/"asselv  =  '1'"/"asselv  =  '11111'"/ test.txt




$s/\([Oo]ccur\)ence/\1rence/


sed s/"\(asselv  .*\)  '1'"/"\1  '11111'"/ test.txt






sed s/"\(asselv  ..?\)  '1'"/"\1  '11111'"/ test2.txt


.\{m, n\}
sed s/"\(asselv  .\{0, 2\}\)  '1'"/"\1  '11111'"/ test2.txt








sed s/"[\(asselv  ..\)|\(asselv  .\)]  '1'"/"\1  '11111'"/ test.txt




sed s/"\(asselv  ..\?\)  '1'"/"\1  '11111'"/ test.txt




sed s/"\(asselv  ..\?\)  '1'"/"\1  '11111'"/ test.txt






sed s/\(asselv  ..\?\)  '1'/\1  '11111'/ test.txt




sed s/"\(asselv  .*\)  '1'"/"\1  '11111'"/ test.txt

相關推薦

sed shell 變數替換 變數含有空格以及引號問題

首先假設我想要echo 一個string帶有單引號怎麼實現呢? [[email protected] ~]# echo '1' 1 [[email protected] ~]# echo "\'1\'" \'1\' [[email protec

shell的字串和數字的轉化(數字自動做字串處理,變數名做字串輸出用引號

shell裡面怎麼樣把字串轉換為數字? 例如:a="024" 1,用${{a}} 2,用let達到(()) 運算效果。 let num=0123; echo $num; 83 3,雙括號運算子: a=$((1+2)); echo $a; 等同於: a=`expr 1 +

shell 指令碼 關於字串的那些事~ 引號、雙引號、不使用引號等等

一:字串的定義 shell指令碼中字串可以使用雙引號、單引號、不使用引號來定義 比如:在不使用引號的情況下字串中間不可以有空格 #!/bin/bash doublestr="hello you"; singlestr="happy you"; str=sadyou echo $d

引號內引入變數 shell 命令輸出賦值給變數以及變數替換命令

單引號內巢狀單引號即可使用變數。 #!/bin/bash i=10 echo $i echo '$i'echo '$i is : '$i'' 執行結果 # ./test.sh  10 $i $i is : 10 單引號內巢狀單引號即可使用變數。 將命令賦值給變數,和將命令

shell 字串操作 + 變數替換

本篇內容包括:     字串操作     變數替換 1.字串操作      表示式 含義 ${#string} 獲取字

Linux Shell Echo多變數輸出時怪異疊寫現象(某些字串變數含有\r或\n)

今天利用Linux Shell命令從檔案中擷取一部分文字行資訊 `Cat file | grep someKeyword` 到Shell變數中,然後又用shell字串變數擷取的方法,提取文字行內更準確的字元資訊;利用同樣的操作方法,得到多個字串變數資訊,最後再用echo組合多變數輸出所需要的格式資訊

shell模板變數替換

我們經常使用一些模板語言來處理一些變數替換。比如jsp,php,velocity,freemarker,thymeleaf等。那對於shell來說,應該怎樣替換變數呢。有一種很簡單的辦法可以做到。 先來看一個應用場景。在datax是阿里開源的一個異構資料來源同步框架,其配置文件是json的,我想要用shell

Linux基礎學習——Shell基礎——Bash變數—數值運算與運算子和變數測試與內容替換

一、數值運算與運算子: 思考引入: [[email protected] sh]# aa=11 [[email protected] sh]# bb=22 [[email protected] sh]# cc=$aa+$bb [[email pro

Shell語法錯誤----變數空格[: too many arguments

我們先來看一段指令碼ret="Peter Anne"if [ $ret == "Peter Anne" ]; then  echo "pass"else  echo "failed"fi程式上看,這段程式碼的邏輯和寫法都是沒有錯誤的。但是其實,實際執行結果將會是:run.sh:  [: too many a

shell程式設計之變數以及awk命令和rename命令

常用的環境變數可以用env和set檢視,但是最全面的還是man bash來檢視。 在這裡舉例一些常用的環境變數echo $HOSTNAME                  檢視主機名 echo $HOSTTYPE                 檢視主機系統型別 echo

Linux Shell替換:轉義字元,命令替換變數替換

轉載自:http://c.biancheng.net/cpp/view/2737.html #######################################################3 轉義字元 如果表示式中存在特殊字元,Shell將會進行替

shell指令碼的簡單使用:二——之變數替換

[b]Shell變數替換,命令替換,轉義字元[/b]a=10echo "a的值是$a\n"echo -e "加了-e轉義後a的值是$a\n"#命令替換#注意是反引號,不是單引號,這個鍵位於 Esc 鍵下方。DATE=`date`echo "Date is $DATE"#當前登

shell筆記之變數

什麼是變數 變數即在程式執行過程中它的值是允許改變的量 變數的型別 全域性變數(環境變數) 系統預設定義好的,大寫字母組成,哪裡都可以使用 自定義全域性變數方法注意 變數名大寫 定義變數時需要使用export命令 01.export I=1

shell指令碼:變數

首行:#!/bin/bash #!符號能夠被核心識別成為一個指令碼的開始,這一行必須位於指令碼的首行 註釋:# 除去第一行的# 內容:可執行結構和內容 建立檔案的方式: touch echo “” > first.sh 注:向檔案輸入””中的內容 > 是覆蓋

Spring表示式實現變數替換

SpEL簡介與功能特性 Spring表示式語言(簡稱SpEL)是一個支援查詢並在執行時操縱一個物件圖的功能強大的表示式語言。SpEL語言的語法類似於統一EL,但提供了更多的功能,最主要的是顯式方法呼叫和基本字串模板函式。 參考:https://www.cnblogs.com/best/p/5

Oracle中的替換變數,&變數名,&&變數

替換變數(僅用於SQL *Plus或者用於原理和SQL *Plus相同的開發工具): 臨時儲存值 利用它可以達到建立通用指令碼的目的 利用它可以達到和使用者互動,故在SQL *Plus中又稱互動式命令 替換變數的格式式在變數名稱前加一個&,以便在執行SQL命令時提示使用者輸入替換資料,然

shell指令碼】 變數基礎學習整理

1.linux系統環境 echo 'echo /etc/profile ' >> /etc/profile echo 'echo /etc/bashrc' >> /etc/bashrc echo 'echo /root/.bashrc ' >> /root/.bas

Shell基礎--Bash變數

一、使用者自定義變數 使用者自定義變數 name='zhangsan' echo $name echo ${name} 變數疊加 name=zhangsan name= ${name}" hello world" name="$name is good" echo $name

Linux Shell基礎 環境變數、位置引數變數、預定義變數

環境變數   環境變數和使用者自定義變數最主要的區別在於,環境變數是全域性變數,而使用者自定義變數是區域性變數。使用者自定義變數只在當前的 Shell 中生效,而環境變數會在當前 Shell 和這個 Shell 的所有子 Shell 中生效。如果把環境變數寫入相應的配

Linux Shell基礎 環境變數配置檔案

source命令:使環境變數配置檔案強制生效 source 命令會強制執行指令碼中的全部命令,而忽略指令碼檔案的許可權。該命令主要用於讓重新配置的環境變數配置檔案強制生效。source 命令格式如下: [[email protected] ~]# source 配置檔案 或 [[ema