【问题标题】:Convert the words after a certain keyword to lower case将某个关键字后面的单词转换为小写
【发布时间】:2018-11-26 22:56:55
【问题描述】:

我正在尝试在使用 shell 脚本的查询中转换 AS 之后的所有单词:

SELECT
first_name AS First_Name,
last_name AS Last_Name,
AGE('1990-10-12') AS Person_Age
FROM table1

我需要的输出是

SELECT
first_name AS first_name,
last_name AS last_name,
AGE('1990-10-12') AS person_age
FROM table1

【问题讨论】:

    标签: regex bash shell unix sed


    【解决方案1】:

    如果您有 GNU sed,则可以使用 \L,这是 s command 的扩展,可将其后面的所有内容转换为小写:

    $ sed -E 's/(AS)(.*)/\1\L\2/' infile
    SELECT
    first_name AS first_name,
    last_name AS last_name,
    AGE('1990-10-12') AS person_age
    FROM table1
    

    【讨论】:

      【解决方案2】:

      使用awk

      awk '/AS/ {for (i=1; i<=NF; i++) if ($i == "AS") $(i+1) = tolower($(i+1))} {print}' < infile.sql
      

      【讨论】:

        【解决方案3】:

        使用 Perl

        $ cat aswin.sql
        SELECT
        first_name AS First_Name,
        last_name AS Last_Name,
        AGE('1990-10-12') AS Person_Age
        FROM table1
        
        $ perl -ne ' { s/\bas\b\s+\b(.+?)\b/AS \L\1\E/gi; print } ' aswin.sql
        SELECT
        first_name AS first_name,
        last_name AS last_name,
        AGE('1990-10-12') AS person_age
        FROM table1
        

        【讨论】:

          猜你喜欢
          • 2018-08-06
          • 2018-08-29
          • 1970-01-01
          • 2010-12-28
          • 2019-06-15
          • 1970-01-01
          • 2021-04-30
          • 2013-04-06
          • 1970-01-01
          相关资源
          最近更新 更多