我有一個腳本來替換各種檔案中的特定電子郵件地址。替換地址是腳本的第一個引數:
#!/bin/bash
perl -pi -e s/'name\@domain\.org'/$1/ file-list
這不起作用,因為其中的@字符$1被 perl 替換了。有一個簡單的解決方法嗎?subst foo\@bar.com以、subst foo\\@bar.com、等方式運行腳本subst "[email protected]"不起作用。是否有可以更輕松地處理此問題的 sed 腳本?
uj5u.com熱心網友回復:
您可以將它作為引數傳遞給 perl,而不是直接在 perl 代碼中擴展 shell 變數s:
#!/usr/bin/env bash
perl -i -spe 's/name\@domain\.org/$replacement/' -- -replacement="$1" file1.txt file2.txt
在 perls///中,不使用eoree修飾符,替換部分中的變數被視為文字,因此您不需要轉義它們。
uj5u.com熱心網友回復:
這可行,但需要您將新的郵件地址傳遞給腳本,并帶有以下@字符\\:
#!/bin/bash
perl -pi -e "s/name\@domain.org/$1/" file-list
如果腳本是subst,則運行為:
subst newname\\@example.com
這是一個更好的選擇,用于sed執行轉義:
#!/bin/bash
ADR="$(echo "$1" | sed -e 's/@/\\\@/')"
perl -pi -e "s/name\@domain.org/$ADR/" file-list
當然,在這種情況下,使用它sed來完成整個事情可能會更好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/445390.html
上一篇:根據MySQL中的分數連接學生
