日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

说说Shell在代码重构中的应用

發(fā)布時間:2024/1/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 说说Shell在代码重构中的应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

說說Shell在代碼重構(gòu)中的應用

出處信息

出處:http://blogread.cn/it/article/3426?f=wb


代碼重構(gòu)(Code refactoring)有時是很枯燥的,字符串替換之類的操作不僅乏味,而且還容易出錯,好在有一些工具可用,以PHP為例,如:RephactorScisr等等,不過現(xiàn)成的工具往往意味著不夠靈活,所以今天我要說說Shell在代碼重構(gòu)中的應用。

先來個簡單的,假設我們要把PHP文件中的foo_bar全都替換成fooBar,那么可以如下:

方法一,使用Sed:

shell> find /path -name "*.php" | xargs sed 's/foo_bar/fooBar/g'

方法二,使用AWK:

shell> find /path -name "*.php" | xargs awk '{ gsub(/foo_bar/, "fooBar"); print; }'

注:為了簡單,我把結(jié)果直接打印到終端屏幕了,至于如何保存,稍后會說明。

接著說個復雜的:假設某個PHP項目,以前使用類之前必須調(diào)用一個名為“includeClass”的方法,現(xiàn)在改用類自動加載的方式,所以要刪除硬編碼的includeClass調(diào)用,出于美觀的考慮,如果includeClass下面一行是空行的話,也一起刪除,同時考慮大小寫不敏感的因素。

重構(gòu)前的代碼示例:

01 <?php 02 includeClass('...'); 03 echo 'a'; 04 05 echo 'b'; 06 includeClass('...'); 07 includeClass('...'); 08 09 10 echo 'c'; 11 12 echo 'd'; 13 includeClass('...'); 14 15 16 echo 'e'; 17 ?>

重構(gòu)后的代碼示例:

01 <?php 02 echo 'a'; 03 04 echo 'b'; 05 06 echo 'c'; 07 08 echo 'd'; 09 10 echo 'e'; 11 ?>

在動手前,我們需要先摸摸底,了解一下大概的情況:

shell> grep -I -ri includeClass /path | more

其中,grep命令的參數(shù)乍一看不好記,不過只要按照我說的方法記,就永遠不會忘:前面的參數(shù)看做英文,后面的參數(shù)看做拼音??。至于參數(shù)的具體含義,請參閱man文檔

方法一,使用Sed編寫腳本script.sh:

#!/bin/shfor PHP in $@; do/bin/sed -i '/includeClass/I {hd}/^$/ {x/includeClass/Idx}h' $PHP done

注:篇幅所限,我把正則寫的比較簡單

Sed的缺點是代碼可讀性比較差,優(yōu)點是代碼較短。另外內(nèi)置的“-i”選項可以直接完成保存,這是我喜歡Sed的原因之一。

方法二,使用AWK編寫腳本script.sh:

#!/bin/shfor PHP in $@; doTMP=$(mktemp)/bin/awk 'BEGIN {IGNORECASE = 1}/includeClass/ {previous = $0next}/^$/ {if (previous ~ /includeClass/) {previous = $0next}}{previous = $0print}' $PHP > $TMP/bin/cp -f $TMP $PHP/bin/rm -f $TMP done

注:篇幅所限,我把正則寫的比較簡單

AWK的缺點是代碼比較長,優(yōu)點是代碼可讀性較好。另外程序中是通過生成一個唯一的臨時文件來完成保存的。

提醒:直接覆蓋原始文件有時候并不合適,畢竟可能有沒考慮周詳?shù)牡胤?#xff0c;使用SVN的話就不會有這樣的顧慮了,因為即便覆蓋了原始文件,也可以在提交前通過“svn diff”命令來檢查對錯,就算是提交了,也可以恢復到以前的版本。

如果調(diào)用script.sh腳本呢?這里給個最一般的例子:

shell> find /path -name "*.php" | xargs /path/to/script.sh

簡單的任務用Sed寫很合適,復雜的任務則最好用AWK寫,實戰(zhàn)是學習的最好方法,具體可以參考Sed One LineAWK One Line等資料。

說明:本文用到的Sed和AWK均指GNU版本。


轉(zhuǎn)載于:https://www.cnblogs.com/leonxyzh/p/7289051.html

總結(jié)

以上是生活随笔為你收集整理的说说Shell在代码重构中的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。