sed tr 去除PATH中的重复项

最近发现由于自己不良的安装软件的习惯,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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十五、MySQL变量(系统变量、自定义变量)相关知识总结

变量: 系统变量&#xff1a; a.全局变量 b.会话变量 自定义变量&#xff1a; a.用户变量 b.局部变量 一、系统变量 说明&#xff1a;变量由系统定义&#xff0c;不是用户定义&#xff0c;属于服务器层面 注意&#xff1a;全局变量需要添加global关键字&#xff0c;会话变量…

LeetCode 2210. 统计数组中峰和谷的数量

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums 。如果两侧距 i 最近的不相等邻居的值均小于 nums[i] &#xff0c;则下标 i 是 nums 中&#xff0c;某个峰的一部分。 类似地&#xff0c;如果两侧距 i 最近的不相等邻居的值均大于 nums[i] &#xff0c;…

【项目总结】如何获取地图上的所有POI

1. 地图POI数据是什么&#xff0c;有什么用 关于地图数据123&#xff0c;可以参考一下这篇 https://www.zhihu.com/question/21530085/answer/18728706&#xff0c;回答了很多信息&#xff1b;下图是摘自其中&#xff0c;展示了建立一个地图需要的几个图层数据&#xff0c;从底…

十六、MySQL流程控制结构(顺序、分支、循环)详解 强化练习

流程控制结构&#xff1a;顺序、分支、循环 一、分支结构 case结构作为表达式&#xff1a; case结构作为独立的语句&#xff1a; if函数 语法&#xff1a;if(条件,值1&#xff0c;值2) 功能&#xff1a;实现双分支 应用在begin end中或外面 case结构 语法&#xff1a; 情…

LeetCode 2211. 统计道路上的碰撞次数

文章目录1. 题目2. 解题1. 题目 在一条无限长的公路上有 n 辆汽车正在行驶。汽车按从左到右的顺序按从 0 到 n - 1 编号&#xff0c;每辆车都在一个 独特的 位置。 给你一个下标从 0 开始的字符串 directions &#xff0c;长度为 n 。 directions[i] 可以是 ‘L’、‘R’ 或 …

服务端的思考

概述 我们思考发布一个web服务需要做的工作&#xff0c;并进行职责的划分。职责的划分 通常我们会先制定抽象的接口&#xff0c;然后根据接口构造实现类。接口和实现类都完成了&#xff0c;再实施发布。所以&#xff0c;服务端的角色可以划分为&#xff1a;服务接口、服务实现、…

IPv6数据报详解

一、为什么有IPv6&#xff1f; 二、IPv6数据报格式 版本&#xff1a;指明了协议版本&#xff0c;总是6。 优先级&#xff1a;区分数据报的类别和优先级。 流标签&#xff1a;“流”是互联网络上从特定源点到特定终点的一系列数据报。所有属于同一个流的数据报都具有同样的流标签…

LeetCode 2212. 射箭比赛中的最大得分(状态枚举)

文章目录1. 题目2. 解题1. 题目 Alice 和 Bob 是一场射箭比赛中的对手。比赛规则如下&#xff1a; Alice 先射 numArrows 支箭&#xff0c;然后 Bob 也射 numArrows 支箭。 分数按下述规则计算&#xff1a; 箭靶有若干整数计分区域&#xff0c;范围从 0 到 11 &#xff08;…

web前端复习系列[1]——标签

<h1>一般用于网站标题。加入强调语气&#xff0c;使用<strong>和<em>标签。<em> 表示强调&#xff0c;<strong> 表示更强烈的强调。并且在浏览器中<em> 默认用斜体表示&#xff0c;<strong> 用粗体表示。两个标签相比&#xff0c;目…

十七、MySQL触发器(创建、删除、查看)详解

触发器 一、介绍 触发器是与表有关的数据库对象&#xff0c;指在 insert/update/delete 之前或之后&#xff0c;触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 。 使用别名 OLD 和 NEW 来引用…

LeetCode 2215. 找出两数组的不同(set)

文章目录1. 题目2. 解题1. 题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;请你返回一个长度为 2 的列表 answer &#xff0c;其中&#xff1a; answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。answer[1] 是 nums2 中所有 不 存在…

HDOJ 5071 Chat 模拟

大模拟&#xff1a; 1》saygoodbye要先对 always on top 的人说 2》对没有说过话的不要说good bye 3》用long long Chat Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 337 Accepted Submission(s): 82Prob…

十八、MySQL之TCL事务控制语言(详解)

TCL &#xff1a; Transaction Control Language 事务控制语言 零、MySQL 中的存储引擎 1、概念&#xff1a;在mysql中的数据用各种不同的技术存储在文件&#xff08;或内存&#xff09;中。 2、通过show engines&#xff1b;来查看mysql支持的存储引擎。 3、 在mysql中用的…

LeetCode 2220. 转换数字的最少位翻转次数(位运算)

文章目录1. 题目2. 解题1. 题目 一次 位翻转 定义为将数字 x 二进制中的一个位进行 翻转 操作&#xff0c;即将 0 变成 1 &#xff0c;或者将 1 变成 0 。 比方说&#xff0c;x 7 &#xff0c;二进制表示为 111 &#xff0c;我们可以选择任意一个位&#xff08;包含没有显示…

UITextField属性

UITextField属性 0、enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话&#xff0c;右下角的返回按钮是disabled的。1、borderStyle 设置边框样式&#xff0c;只有设置了才会显示边框样式text.borderStyle UITextBorderStyleRoundedRect;ty…

LeetCode 2221. 数组的三角和

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums &#xff0c;其中 nums[i] 是 0 到 9 之间&#xff08;两者都包含&#xff09;的一个数字。 nums 的 三角和 是执行以下操作以后最后剩下元素的值&#xff1a; nums 初始包含 n 个元素。如果 n 1 &…

十九、MySQL常用命令总结

数据结构核心原理与算法应用C:\Windows\system32> net stop mysql0815MySQL0815 服务正在停止. MySQL0815 服务已成功停止。C:\Windows\system32>net start mysql0815 MySQL0815 服务正在启动 . MySQL0815 服务已经启动成功。C:\Windows\system32>mysql -h localhost…

移动web开发之rem布局(rem基础、媒体查询、 less 基础、rem适配方案)

移动web开发之rem布局 一、rem基础 rem单位 rem (root em)是一个相对单位&#xff0c;类似于em&#xff0c;em是父元素字体大小。 不同的是rem的基准是相对于html元素的字体大小。 比如&#xff0c;根元素&#xff08;html&#xff09;设置font-size12px; 非根元素设置wid…

LeetCode 2222. 选择建筑的方案数

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的二进制字符串 s &#xff0c;它表示一条街沿途的建筑类型&#xff0c;其中&#xff1a; s[i] 0 表示第 i 栋建筑是一栋办公楼&#xff0c;s[i] 1 表示第 i 栋建筑是一间餐厅。 作为市政厅的官员&#xff0c;你需要随…

内存管理 内存泄漏

垃圾回收机制是周期性的&#xff0c;按照特定的周期循环&#xff0c;或者按照预先定义的时间执行最流行的回收机制是mark-and-sweep当一个变量进入当前上下文&#xff0c;那么会被标示为在上下文中&#xff0c;内存不会被释放&#xff0c;当他离开会被标示为不在上下文&#xf…