[英]removing extra space
貓myfile.sql
DELIMITER $$
USE `AA4`$$
DROP TRIGGER /*!50032 IF EXISTS */ `AT_Card_INSERT_Trigger`$$
CREATE
/*!50017 DEFINER='root'@'%' */
TRIGGER `AT_Card_INSERT_Trigger` AFTER INSERT ON `card`
FOR EACH ROW BEGIN
以下內容將按預期工作,並刪除了definer子句。
sed -e 's/DEFINER=[^*]*\*/\*/' myfile.sql
但是它不適用於等於號之前或之后的空格。 例如,如果我有這樣一條線...
/*!50017 DEFINER = 'root'@'%' */
然后我需要一個類似sed的語句...
sed -e 's/DEFINER\ =\ [^*]*\*/\*/' myfile.sql
但是還有2個帶有空間的可能性(之前沒有空間,之后沒有空間)。 在“ =”之前或之后也可能有超過1個空格。 我該如何處理?
您可以只添加*
(單個空格后跟*
)以匹配零個或多個空格:
sed -e 's/DEFINER *= *[^*]*\*/\*/' myfile.sql
如果您使用的是OSX,則可以使用以下方式允許更多的空格,而不僅僅是空格:
# OSX
sed -E -e 's/DEFINER[[:space:]]*=[[:space:]]*[^*]*\*/\*/' myfile.sql
如果使用-r
代替-E
,則同樣適用於GNU sed(1) :
# GNU
sed -r -e 's/DEFINER[[:space:]]*=[[:space:]]*[^*]*\*/\*/' myfile.sql
GNU sed(1)也理解空格\\s
:
# GNU
sed -r -e 's/DEFINER\s*=\s*[^*]*\*/\*/' myfile.sql
您已經知道如何使用Kleene星; 它也適用於空間:
sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' myfile.sql
那只處理空格。 如果還需要標簽,也將它們放入[ ]
部分。 如果您擁有了解\\s
的擴展sed,那么您甚至可以得到更高級的產品。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.