最近发现由于自己不良的安装软件的习惯,shell的PATH路径包含了很多冗余的项。这里使用shell命令去除PATH的冗余项。

export PATH=$(echo $PATH | sed 's/:/\n/g' | sort | uniq | tr -s '\n' ':' | sed 's/:$//g')

上面的代码可以去除linux环境变量中的重复项。


最近查看环境变量时,发现PATH中包含了很多重复项,而在~/.bashrc中又没有看到什么重复的指令,只好手动去重了。

起先在网上看到有人使用awk命令,如下:

awk -F: '{
sep = ""
for (i = 1; i <= NF; ++i)
if (unique[$i] != 1){
out = out sep $i
sep = ":"
unique[$i] = 1
}
print out
}' <<< $PATH

但是我发现如果使用这份代码的话每次进行source更新时就会在原本的PATH路径下重复增加一些内容。而我对bash还不太熟,决定学一下,然后自己写一份。


#主要的指令
#替换
sed 's/旧的字符串/新的字符串/g'
#去重
uniq
#排序
sort
替换
tr -s '旧的字符' '新的字符'

因为目的是去重,所以一定要使用uniq指令,查看用法的话,有两点需要注意:
1. uniq只能用于行间去重
2. 重复的行必须相邻

解决方案:
1. 对PATH变量进行适当的换行符替换
2. 使用sort排序,使重复的行相邻

字符替换

sed和tr都是用于替换,为什么要使用两种呢?

tr算是一种轻量级的替换方法了,直接将符合的字符替换,不支持正则表达式。用来替换换行符比较方便。但如果想要做稍微复杂点的事情就比较困难了。
sed比较强大,支持正则表达式,但是它对换行符有自己的一套处理方式,增加时还比较正常,但我还尚未找到去掉的方法。

在我的处理过程中,有这样的步骤
1. 将原本的':'替换为'\n', 因为最后一组不存在':',而在排序后并不确定哪一组会排在最后,所以并不是追加换行符
2. 排序
3. 去重
4. 将'\n'替换为':'
5. 将最后一个:删去

完成

sed tr 去除PATH中的重复项的更多相关文章

  1. 如何去除PATH里的重复项并排序

    注意sed的用法,linux和Mac os不同,linux是Gnu的,Mac是BSD的 PATH排序去掉重复内容 mac和linux的换行符替换方法不一样,如下是Mac下的操作 export PATH ...

  2. js 巧妙去除数组中的重复项

    1.代码如下: var toObject = function(a) { var o = {}; for (var i=0, j=a.length; i<j; i=i+1) { // 这里我调整 ...

  3. c#去除List中的重复项

    List<string> list = new List<string> {"a", "a", "b", " ...

  4. arts打卡 从排序数组中删除重复项

    Algorithm 从排序数组中删除重复项     给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组 ...

  5. LeetCode(26): 删除排序数组中的重复项

    Easy! 题目描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间 ...

  6. [LeetCode] 82. Remove Duplicates from Sorted List II 移除有序链表中的重复项 II

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  7. PHP二维数组--去除指定列含有重复项的数组

    给定二维数组: $arr = array( '0' => array('张三',2,3,4), '1' => array('李四',2,3,4), '2' => array('张三' ...

  8. [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项

    2.1 Write code to remove duplicates from an unsorted linked list.FOLLOW UPHow would you solve this p ...

  9. C/C++面试之算法系列--去除数组中的重复数字

    去除数组中的重复数字 Sailor_forever  sailing_9806@163.com 转载请注明 http://blog.csdn.net/sailor_8318/archive/2008/ ...

随机推荐

  1. Android -- 自定义控件(ImageButton)

    1. 效果图

  2. JS运算符

    JS运算符: 使用的运算符的时候不需要声明变量,运算符非变量:1.算术运算符 + - * / % (%为取余数运算符) (自增运算符++) (自减运算符 --) + 运算符作用:1.数值相加 2.字符 ...

  3. 利用 canvas 破解 某拖动验证码

    利用 canvas 破解 某拖动验证码 http://my.oschina.net/u/237940/blog/337194

  4. HDU 1892 See you~ (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1892 See you~ Problem Description Now I am leaving h ...

  5. springboot+dubbo

    使用springboot搭建dubbo服务,首先封装出springboot-dubbo的项目,引入在服务上加直接@Service直接使用,方便于拆封统一管理. package hello.dubbo. ...

  6. 浮点数 (IEEE-754)

    浮点数又称"实数",一个浮点数包含三个部分 符号位(S) 阶码 有效数字 S:阶码:有效数字 浮点数是由科学二级制来表示的. 三种类型的浮点数: 短浮点数(32bit):  S(b ...

  7. 去除DataTable中的重复数据

    有时需要从DataTable中抽取Distinct数据,遍历比较费劲,C#.NET中其实有更易用的方法,如下: string[] columnArray = { "columnName1&q ...

  8. Symbols

    https://hacks.mozilla.org/2015/06/es6-in-depth-symbols/ <script> function w(wcon) { console.lo ...

  9. Electronic oscillator

    https://en.wikipedia.org/wiki/Electronic_oscillator An electronic oscillator is an electronic circui ...

  10. [转]你不需要jQuery

    完全没有否定jQuery的意思,jQuery是一个神奇的.非常有用的工具,可以节省我们大量的时间. 但是,有些时候,我们只需要jQuery的一个小功能,来完成一个小任务,完全没有必要加载整个jQuer ...