簡體   English   中英

刪除多余的空間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM