最近发现由于自己不良的安装软件的习惯,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 $isep = ":"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. 将最后一个:删去

完成

转载于:https://www.cnblogs.com/darryo/p/sed-tr-qu-chuPATH-zhong-de-zhong-fu-xiang.html

sed tr 去除PATH中的重复项相关推荐

  1. linux下环境变量重复,如何清除linux环境变量PATH中的重复项?

    如何清除linux环境变量PATH中的重复项? 來源:互聯網  2010-05-26 18:34:31  評論 分類: 電腦/網絡 >> 操作系統/系統故障 問題描述: 操作系统:linu ...

  2. python如何去除列表中的重复项_Python 中去除列表中重复元素的5种方法

    (点击上方快速关注并设置为星标,一起学Python) 1.使用集合 Python中集合的元素是唯一的,具有去重的功能.使用集合与列表可以互转的特性,将列表转换为集合去重,再将集合转换为列表: def ...

  3. scala 去除重复元素_Scala程序从列表中删除重复项

    scala 去除重复元素 List in Scala is a collection that stores data in the form of a liked-list. The list is ...

  4. java 数组去除重复_Java从数组中删除重复项?

    Java从数组中删除重复项? 我应该在包含许多不同电子邮件地址的文件中读取并使用数组打印出来.问题是我需要消除重复的电子邮件. 我能够让我的try / catch工作并打印出电子邮件地址.但是,我不知 ...

  5. excel 下拉列表多选_多选Excel下拉列表中无重复项

    excel 下拉列表多选 Thanks to an email question from Leslie, I've done another variation on the Data Valida ...

  6. 【每日一算法】删除排序数组中的重复项

    微信改版,加星标不迷路! 每日一算法-删除排序数组中的重复项 作者:阿广 阅读目录 ? 题目 ? 解析 ? 完整代码 1 题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次 ...

  7. R语言unique函数计算数据对象(vector、dataframe)的unique独特值:unique函数从vector向量、dataframe中删除重复项、删除dataframe重复行

    R语言unique函数计算数据对象(vector.dataframe)的unique独特值:unique函数从vector向量.dataframe中删除重复项.删除dataframe重复行 目录

  8. python使用正则表达式去除句子中的重复词

    python使用正则表达式去除句子中的重复词 #python使用正则表达式去除句子中的重复词 # Python program to remove duplicate words # using Re ...

  9. 去除源文件中的重复行的程序流程及其C代码实现

    (本人正在参加2015博客之星评选,诚邀你来投票,谢谢:http://vote.blog.csdn.net/blogstar2015/candidate?username=zhouzxi) 一.需求描 ...

最新文章

  1. 计算机考试字字处理重点,计算机等级考试一级B上机试题:字表处理题(1)
  2. 数据类型(Python)
  3. getRealPath(““)与getRealPath(“/“)区别及用法——计算机网络相关学习笔记
  4. 读取无线手柄数据_xbox series x/s 手柄开箱
  5. LeetCode MySQL 1571. 仓库经理
  6. String类的对象的方法 格式小结 java 1202
  7. NoClassDefFoundError: Could not initialize class com.fasterxml.jackson.databind.ObjectMapper
  8. matplotlib.pyplot库解析
  9. H3CSE认证网络工程师视频课程-交换技术-宋文峰-专题视频课程
  10. paip.一千 常用汉字 高频汉字 覆盖率90%
  11. Splitter和Joiner使用手册
  12. echarts生成三维柱状图
  13. SOT-223 封装尺寸图
  14. ​奥运赛事,斩获的不止是金银
  15. 一个在线显示doc文本的实例
  16. tensorboard使用界面介绍以及使用方法(看这篇就够了,都有源码可以直接测试)
  17. 6、Spring Boot:自定义Servlet Filters
  18. 转:CentOS 7 安装Nginx
  19. linux下多个文件相同行合并
  20. java servlet文件上传_JavaServlet的文件上传和下载

热门文章

  1. Spring-data-jpa常用方法
  2. php __FILE__,__CLASS__等魔术变量,及实例
  3. 《Windows PowerShell实战指南(第2版)》——1.4 搭建自己的实验环境
  4. android 学习随笔十六(广播 )
  5. 关于JS获取select值的两种实现方法
  6. 一个配置web.xml的编程方法
  7. 设计师和开发人员更快完成工作需求的35个惊人的jquery插件教程(下)
  8. javascirpt历史澄清误解基本概念特点编程语言web2.0网页javascript - javascirpt知识大全...
  9. 个人收集一些程序员面试题目(一) 一起分享
  10. 2000服务器文件共享,Win2000 Server实现对共享文件的监控