awk는 "특수 문자"에 신경 쓰지 않습니다. 이것은에 나오지 :
sed '/<jobResulsDir/s/<jobResulsDir/<CommCellUser userName="'$4'" password="'$5'" > <\/CommCellUser> '$test' <jobResulsDir /'
는 AWK이 있습니다 :
awk -v userName="$4" -v password="$5" -v test="$test" '
/<jobResulsDir/{ sub(/<jobResulsDir/, "<CommCellUser userName=" userName " password=" password " </CommCellUser> " test " <jobResulsDir ") }
{ print }
'
하지만 RE 그래서 당신이 존재하는 경우 실제로에만 발생합니다), 서브 (때문에 앞까지 /<jobResulsDir/
을 테스트 할 필요가 없습니다 이 의견/질문은 질문 있지만 값 이름 주위에 따옴표를 필요로하는 경우, 당신이 그들을 필요로하는 곳에 그들을 제공하는 스크립트를 조정할 수 있었는지의 경우
awk -v userName="$4" -v password="$5" -v test="$test" '
{ sub(/<jobResulsDir/, "<CommCellUser userName=" userName " password=" password " </CommCellUser> " test " <jobResulsDir "); print }
'
확실하지 :로 축약 할 수 있습니다 :
awk -v userName="$4" -v password="$5" -v test="$test" '
{ sub(/<jobResulsDir/, "<CommCellUser userName=\"" userName "\" password=\"" password "\" </CommCellUser> \"" test "\" <jobResulsDir "); print }
'
그리고 마지막으로, 여기에 좀 더 읽기 쉽고 만약 당신이 좋아하면 더 효율적으로 작업을 분할 할 수있는 하나의 방법 :
awk -v userName="$4" -v password="$5" -v test="$test" '
BEGIN{
q = "\""
rep = \
"<CommCellUser userName=" q userName q\
" password=" q password q\
" </CommCellUser> " q test q\
" <jobResulsDir "
}
{ sub(/<jobResulsDir/, rep); print }
'
그리고 그것을보고 그런 식으로 배치 내가 내가 거짓말을 실현 awk가 "특수 문자"에 신경 쓰지 않는 것에 대해서는 거의 없습니다.sub()는 실제적으로 1 "특수 문자"에 대해 신경 쓰고 대체 문자열에 "&"이있는 것은 sub()에서 일치하는 것을 역 참조하는 데 사용되므로 "&"을 "\ &"으로 대체해야합니다. 담당자 : 그것은 소요
awk -v userName="$4" -v password="$5" -v test="$test" '
BEGIN{
q = "\""
rep = \
"<CommCellUser userName=" q userName q\
" password=" q password q\
" </CommCellUser> " q test q\
" <jobResulsDir "
}
{ gsub(/&/,"\\\\&",rep); sub(/<jobResulsDir/, rep); print }
4 "\"의 문자열 리터럴은 AWK에 두 번 해석 얻을 때문에 (스크립트가 해석되고 다시 한번 실행 때) 당신이 필요로 리터럴 백 슬래시를 얻을 수 있도록 대신 \의 \ \.
원하는 경우 그 제약이없는 경기() 및 SUBSTR를 (사용하여 다른 방법)이있다 :
awk -v userName="$4" -v password="$5" -v test="$test" '
BEGIN{
q = "\""
rep = \
"<CommCellUser userName=" q userName q\
" password=" q password q\
" </CommCellUser> " q test q\
" <jobResulsDir "
}
match($0,/<jobResulsDir/) {
$0 = substr($0,1,RSTART) rep substr($0,RSTART+RLENGTH)
}
{ print }
'
개인적으로, 나는 (경기에 가고 싶어)/SUBSTR()는 나는 이스케이프 문자로 주변을 어지럽히는 것이 싫기 때문에 접근했다. 만약 당신이 좋아하면
그리고 단지 우리가 시작한 곳으로 다시 순환 라운드
, 여기 당신이 한 줄 같은 것을 쓸 수 방법은 다음과 같습니다
awk -v userName="$4" -v password="$5" -v test="$test" '{
print (match($0,/<jobResulsDir/) ? substr($0,1,RSTART) "<CommCellUser userName=\"" userName "\"password=\"" password "\" </CommCellUser> \"" test "\" <jobResulsDir " substr($0,RSTART+RLENGTH) : $0)
}'
죄송합니다 내가 생각 붙여 전체 나오지 명령을 didnt : 나오지도 '/ < "$ test" $ temp_dir/PreImageModeFile2.xml
user12345
그래서 코드를 말해야합니다. – choroba