首页 > 编程语言 >编程周边辅助

编程周边辅助

时间:2023-10-21 12:44:22浏览次数:36  
标签:文件 周边 辅助 编程 echo ---------------------------------------------------------------

Vim操作

删除空行

:g/^$/d

删除并包括空白

g全局命令对所有与地址匹配的行,%:代表这文件本身每一行,% == g/.*/

:g/^\s*$/d
:%s/^\s*$\n//

非贪婪匹配

.\{-}

vim查看当前与改动

:w !diff % -
# 然后如果还需要合并,那就只能:w一个新的文件,
# 然后两个文件使用vimdiff,手动操作合并到一个文件里面。
# :w filename 会将当前改动后的内容保存到filename文件
# :w !cmd 会将当前文件的内容以stdin给到后边的指令
# % 指代当前文件名因此,:w !diff % - 就是将当前文件内容以stdin给到
# diff % - 也就达到对比原文件和改动后的文件的效果

vim按照段落移动

# ):向前移动一条句子
# }: 向前移动一个段落

分组替换使用\转义(,并使用控制符号\U转换\1为大写

:%s/^\(.\{2\}\)/\U\1/g

创建删除折叠marker

:set fdm=marker
zf 创建marker
zd 删除当前行上存在的折叠标记

vim的分组替换

:s/\(.*\)=\(.*\);/\2=\1;/g

Makefile阅读实例

FILES = $(wildcard *.S)
# -------------------------------------------------------------------------------------------
objects = foo.o bar.o
all: $(objects)
    
%.o: %.c
	$(CC) -c $(CFLAGS) $< -o $@
# -------------------------------------------------------------------------------------------
src := acc bcc ccc
obj := $(src:cc=o)
test:
	@echo "obj => $(obj)"
# -------------------------------------------------------------------------------------------
src := a123b.c a234b.c ajkhb.c
obj := $(src:a%b.c=x%y)
test:
	@echo "obj => $(obj)"
# -------------------------------------------------------------------------------------------

$(patsubst %.c,%.o,value_list)
# -------------------------------------------------------------------------------------------
override A = 10
def:
        echo $(A)
# 防止外部的make命令对Makefile里的变量进行更改
# -------------------------------------------------------------------------------------------
include xxx.mk
# -------------------------------------------------------------------------------------------
# 强制编译
make -B
# -------------------------------------------------------------------------------------------
# 抽取路径、文件名
$ (dir names...)
$(notdir names...)
# -------------------------------------------------------------------------------------------
$(suffix names)
$(basename names...)
# -------------------------------------------------------------------------------------------
# 忽略错误继续执行
make -i
# -------------------------------------------------------------------------------------------
# 静默执行
make -s
# -------------------------------------------------------------------------------------------
# 判断包含字符串
mode = debug
hello: hello.c
ifneq (,findstring mode, $patten)
    @echo "find mode in patten" 
else
    @echo "not find"
endif
# -------------------------------------------------------------------------------------------
# Makefile中定义函数,使用define\endef
define output
	A=pwd#作为字符串输出
	A=`pwd`#作为字符串输出
	A=$(shell pwd)
	#只有这个A的值是pwd展开之后的值,但是
	echo $(A)
	#这句的输出是空的,上一句A=$(shell pwd)并不是存在一个被赋值的变量A
endef
all:
	$(call output)
# -------------------------------------------------------------------------------------------
# 输出makefile中的所有数据,包括所有的规则和变量。
# 且如果目标存在,那么其不会执行编译,目标不存在则报错。
make -pq
# -------------------------------------------------------------------------------------------
# 静默执行
$MAKE -s --no-print-directory

Bash编程阅读实例

for i in "$@"
do
   echo $i   #会经历$#次循环
done
# -------------------------------------------------------------------------------------------
for i in "$*"
do
   echo $i  #只会进行一次循环,如果$*没有加双引号则会进行$#次循环
done
# -------------------------------------------------------------------------------------------
usage() {
  echo "Usage: ${0} [-s|--start] [-e|--end] [-i|--scfid] [-g|--gene]" 1>&2
  exit 1 
}
while [[ $# -gt 0 ]];do
  key=${1}
  case ${key} in
    -s|--start)
      START=${2}
      shift 2
      ;;
    -e|--end)
      END=${2}
      shift 2
      ;;
    -i|--scfid)
      SCFID=${2}
      shift 2
      ;;
    -g|--gene)
      GENE=${2}
      shift 2
      ;;
    *)
      usage
      shift
      ;;
  esac
done
# -------------------------------------------------------------------------------------------
array=(bill   chen  bai   hu);
num=${#array[@]} //获取数组元素的个数。
for ((i=0;i<num;i++))
{
	echo ${array[$i]}
}
${#array[i]}  //获取数组某一个单元的长度
# -------------------------------------------------------------------------------------------
${array[*]}
for var in  ${array[*]}
do
echo $var;
done
${#var} //获取数组某一个单元的长度
# -------------------------------------------------------------------------------------------
function foo() {
   typeset -a arr=("$@")
   for e in "${arr[@]}"; do
      echo "element: $e"
   done
}
array=(aa bb cc)
foo "${array[@]}"
# -------------------------------------------------------------------------------------------
# typeset和declare相同。
# -i 定义整形
# -a 定义数组
# -A定义关联数组
declare -A array2
array2=([name]=zhangsan [sex]=male [age]=29)
# -------------------------------------------------------------------------------------------
for i in {0..9}; do
	echo $i
done
# -------------------------------------------------------------------------------------------
echo asdf | tr a-z A-Z
# -------------------------------------------------------------------------------------------
# 判断字符串相等。在[[ ]]中,变量的引用可以不加双引号;这是与[ ]的不同之处
test "$S1" = "$S2"
[ "$S1" = "$S2" ]
test "$S1" == "$S2"
[ "$S1" == "$S2" ]
[[ $S1 = $S2 ]]
[[ $S1 == $S2 ]]
# -------------------------------------------------------------------------------------------
cat /etc/passwd | sort -t ':' -k 3
#/etc/passwd 内容是以 : 来分隔的,以第三栏来排序
# -------------------------------------------------------------------------------------------
# 大写转小写
project_name=AAA
echo ${project_name,,} 
# -------------------------------------------------------------------------------------------
find ./ -type f -size +1M
# -------------------------------------------------------------------------------------------
# 当文件拷贝失败,则进行后续执行,执行:,返回永真。
cp ./src/*/*.h ./aaa 2>/dev/null || :
# -------------------------------------------------------------------------------------------
# file1文件内容减去file2文件内容,查看file1多出来什么内容。
grep -v -f file2 file1
file1:
line1
line2
line3
file2:
line1
line2
line4
line5
output:
line3
# -------------------------------------------------------------------------------------------
# 删除文本中重复的内容
# sort -u file1.log
# -------------------------------------------------------------------------------------------
# 获取某行
sed -n "1p"
# -------------------------------------------------------------------------------------------
# 字符串分割
echo $IN | tr ";" "\n"
# -------------------------------------------------------------------------------------------
# 以下的比较为字符串比较,当actual_size为21,不管大于还是小于,都成立。
echo $actual_size
if [[ $actual_size > 100 ]]
then
    echo "Big"
else
    echo "small"
fi
在[[中,>运算符进行字符串比较。因此,这是一个词典比较,而不是数字。在[中,>操作符是一个文件重定向。尝试:
[ "$actual_size" -gt 100 ]
[[ "$actual_size" -gt 100 ]]
这样是数字比较。
# -------------------------------------------------------------------------------------------
# 查看进程被哪个文件占用
fuser filename
fuser dirname
# -------------------------------------------------------------------------------------------
# 批量创建文件夹
# 使用xargs 指定-d的分割符号,然后才会创建三个文件夹,名为dir1、dir2、dir3。
# 使用-p,每次执行前确认。
# 使用-t,显示要执行的命令。
echo "dir1 dir2 dir3" | xargs mkdir
echo "dir1 dir2 dir3" | xargs -p mkdir
echo "dir1:dir2:dir3" | xargs -d ":" mkdir
echo "dir1 dir2 dir3" | xargs -t mkdir
# -------------------------------------------------------------------------------------------
# print0选项,则不打印回车了,取而代之是\0,即^@,也即null。
# xargs里的-0,则将管道得到的结果以null分割,即不分割。
# -0去掉则报错。sed命令中的.号匹配非0x0d字符,即非\n字符,
# \r字符结尾的行被清空。
# sed可以一次输入多个文件
find ./ -type f -print0 | xargs -0 sed -i 's/.$//'
# -------------------------------------------------------------------------------------------
# 以指定的增量输出文本,位宽为2,不足的地方填0,-f为格式化
# (没有%d,有%e,%g,%f)和sv的$display相似。
seq -f "%02g ddt" 1 10 > test.txt
# -------------------------------------------------------------------------------------------
# 打印指定行的内容
sed -n '5,10p' test.txt
awk 'NR>4 && NR<11' test.txt
tail -n +5 test.txt | head -6
# -------------------------------------------------------------------------------------------
# 删除a.txt中含"abc"的行,但不改变a.txt文件本身,操作之后的结果在终端显示
sed -e '/abc/d'  a.txt
# -------------------------------------------------------------------------------------------
# 批量修改文件名
# 目录下文件名为如下,要求去掉_finished。
# stu_102999_1_finished.jpg
# stu_102999_2_finished.jpg
# stu_102999_3_finished.jpg
# stu_102999_4_finished.jpg
# stu_102999_5_finished.jpg
# 方法1,该方法不太适合centos,因为centos有删减
rename "_finished" "" *.jpg
# 方法2,推荐,写脚本
for file in `ls *.jpg`;
	do mv $file `echo $file|sed 's/_finished//g'`;
done;
# 方法3,还行,是生成一堆命令后,用bash执行
ls *.jpg |awk -F "_finished" '{print "mv "$0" "$1$2""}'|bash
# -------------------------------------------------------------------------------------------
# grep找出不包含指定字符的文件名
grep 123 . -r -l 列出包含123的文件
grep 123 . -r -L 列出不包含123的文件
# -------------------------------------------------------------------------------------------
# 每次将n项输出
cat a | xargs -n 3
# -------------------------------------------------------------------------------------------
# 将参数传递给多个命令
cat 1.txt
A B C
cat 1.txt | xargs -I file sh -c 'echo file; mkdir file'
ls
A B C
# -------------------------------------------------------------------------------------------
# 命令并行执行,以4次为粒度
seq 10 | xargs -I {} -P 4 bash -c "echo start {}; sleep 3; echo done {}"
seq 10 | xargs -i -P 4 bash -c "echo start {}; sleep 3; echo done {}"
seq 10 | xargs -I {} --max-procs=4 bash -c "echo start {}; sleep 3; echo done {}"
# -------------------------------------------------------------------------------------------
grep -C 10 keyword catalina.out
# 显示file文件中匹配keyword字串那行以及上下10行
grep -B 10 keyword catalina.out
# 显示keyword及前10行
grep -A 10 keyword catalina.out
# 显示keyword及后10行
# -------------------------------------------------------------------------------------------
# find 查找使用not
find ! -name 'tmp'
# -------------------------------------------------------------------------------------------
# sed使用分组替换,使用-r选项,使能拓展正则
sed  -r -i 's/(PASS_MAX_DAYS)\s+([0-9]+)/\1 90/'  /etc/login.defs
# 将PASS_MAX_DAYS   99999替换为PASS_MAX_DAYS 90
# -------------------------------------------------------------------------------------------
# 取消和查看环境变量
unset VALUE
env | grep VALUE
# -------------------------------------------------------------------------------------------
# 对字符串做strip,使用echo命令
s=`echo " A BC  "`
echo $s
# A BC,是输出结果。
# -------------------------------------------------------------------------------------------
# 比较两个文件并输出相同部分的内容
grep -wf file1 file2
# 找出文件a中不在文件b中出现的内容:
grep -vf b a > 1.txt
# -------------------------------------------------------------------------------------------
# sed删除匹配行
sed -i '/asdf/d' a.txt
# -------------------------------------------------------------------------------------------
# 日期转数字
date -d "Nov  4 15:49:41 CST 2018" +%s
# 1541317781
# -------------------------------------------------------------------------------------------
# linux字符串包含,使用grep
[[ `echo "asdf #" | grep "#"` != "" ]]
# 使用字符串运算
[[ "asdf #" =~ "#" ]]
# -------------------------------------------------------------------------------------------
# linux判断文件是否存在
[[ -e filename ]]
[ -f $file_var ]	变量 $file_var 是一个正常的文件路径或文件名 (file),则返回真
[ -x $var ]	变量 $var 包含的文件可执行 (execute),则返回真
[ -d $var ]	变量 $var 包含的文件是目录 (directory),则返回真
[ -e $var ]	变量 $var 包含的文件存在 (exist),则返回真
[ -c $var ]	变量 $var 包含的文件是一个字符设备文件的路径 (character),则返回真
[ -b $var ]	变量 $var 包含的文件是一个块设备文件的路径 (block),则返回真
[ -w $var ]	变量 $var 包含的文件可写(write),则返回真
[ -r $var ]	变量 $var 包含的文件可读 (read),则返回真
[ -L $var ]	变量 $var 包含是一个符号链接 (link),则返回真
# -------------------------------------------------------------------------------------------
# sed命令,替换换行符"\n"
# 以下代码无效
sed "s/\n//g" file
# :a生成标记a,N为下一行合并当前行处理,s为替换指示。ta和a配合,t为test跳转,当中间部分替换成功,则继续执行。
sed ":a;N;s/\n//g;ta" a.txt
# b为branch跳转,中间部分无条件跳转执行。
sed ":a;N;s/\n//g;ba" a.txt
# -------------------------------------------------------------------------------------------
# bash某文本前或者后添加内容
# 使用sed命令,然后使用i和a,在第二个/的位置。i为之前,a为之后。
# 匹配行前加
sed -i '/allow 361way.com/iallow www.361way.com' the.conf.file
# 匹配行前后
sed -i '/allow 361way.com/aallow www.361way.com' the.conf.file
# 在书写的时候为便与区分,往往会在i和a前面加一个反加一个反斜杠:
sed -i '/2222222222/a\3333333333' test.txt
sed -i '/2222222222/i\3333333333' test.txt
# 把"hello"插入到第2行
sed -i '2i hello' sample.txt
# 把"hello"插入到最后一行
sed -i '$a hello' sample.txt
# -------------------------------------------------------------------------------------------
# 使用grep查找包括两部分的内容
grep -A 3 -B 3 'error' file1.txt file2.txt file3.txt | grep -B 3 'warning'
# -------------------------------------------------------------------------------------------
bash创建子进程
(
(command1 ; )&
command2 ;
...
wait ;
) &
wait
# -------------------------------------------------------------------------------------------
# 以树形结构显示程序和进程之间的关系
# -p	显示进程的 PID。
pstree
# -------------------------------------------------------------------------------------------
# 进程停止和恢复
kill -STOP 1234 将该进程暂停。 
kill -CONT 1234 恢复
# -------------------------------------------------------------------------------------------
# sed命令嵌套操作,使用N命令:Next 命令(N):将数据流中的下一行加进来创建一个多行组来处理。
[root@localhost ~]# cat data2.txt
This is the header line.
This is the first data line.
This is the second data line.
This is the last line.
[root@localhost ~]# sed '/first/{ N ; s/\n/ / }' data2.txt
This is the header line.
This is the first data line. This is the second data line.
This is the last line.
# -------------------------------------------------------------------------------------------
# tail 命令默认输出文件的最后10行,加上 +1 参数可以输出文件除第一行
# 以外的所有行。
tail -n +1 file.txt
# -------------------------------------------------------------------------------------------
# mail使用
z # 查看邮件列表
f num # 切换到某个邮件
空格 # 向下翻动
回车 # 向下翻动,超出则调到下一封邮件
# -------------------------------------------------------------------------------------------
# 将文件夹下所有文件名的from变成to
rename from to *
# -------------------------------------------------------------------------------------------
# bash内置的getopts工具了,用于解析shell脚本中的参数。
#!/usr/bin/env bash
# -n 名称
# -a 作者
# -h 帮助
# 有两个预先定义的变量,OPTARG表示选项值,OPTIND表示参数索引位置,类似于前面提到$1。
# n后面有:,表示该选项需要参数,而h后面没有:,表示不需要参数
# 最开始的一个冒号,表示出现错误时保持静默,并抑制正常的错误消息
# 该模式在识别到无效选项时,会命中?,且当前选项字符会保存在OPTARG中。
while getopts ":n:a:h" optname
do
    case "$optname" in
      "n")
        echo "get option -n,value is $OPTARG"
        ;;
      "q")
        echo "get option -a ,value is $OPTARG"
        ;;
      "h")
        echo "get option -h,eg:./test.sh -n 编程珠玑 -a 守望先生"
        ;;
      ":")
        echo "No argument value for option $OPTARG"
        ;;
      "?")
        echo "Unknown option $OPTARG"
        ;;
      *)
        echo "Unknown error while processing options"
        ;;
    esac
    #echo "option index is $OPTIND"
done

./test.sh -a
# No argument value for option a
./test.sh -h
# get option -h,eg:./test.sh -n 编程珠玑 -a 守望先生
./test.sh -a 守望先生
# get option -a ,value is 守望先生
# 此时的OPTIND表示参数索引位置,$OPTIND得到的值为3.
# -------------------------------------------------------------------------------------------
# 对所有文件追加信息
# 使用xargs由于替换符号不识别,无法正常使用,替换符{}没有被替换
ls | xargs -I {} echo "xxxx" >> {}
# 使用tee命令,将数据追加到指定文件中
echo "xxxx" | tee -a `ls`
# -------------------------------------------------------------------------------------------
# echo 打印回车且使用双引号(单引号+-e似乎可以直接识别\n)
# 双引号注意前后必须有字符,如空格。打印的地方如果是变量,需要加上引号
str=`echo -e "aaa \n bbb"`
echo -e "$str"
# -------------------------------------------------------------------------------------------
# killall交互式删除,忽略大小写。
# -i选项。-i,交互式删除,-I,忽略大小写。
killall -i xxx
killall -I xxx

Linux操作

Bsub操作

https://www.ibm.com/docs/zh/spectrum-lsf/10.1.0?topic=bsub-options

bsub -J JOB_NAME -q nomal -m COMMAND

# 查看集群状态
lsid
# 查看队列状态
bqueues
# 查看结点负载
Lsload
# 查看5分钟内的作业详细信息
bjobs
# 一个作业完成5分钟后,只能使用bhist -l查看作业详情,之前作业详情是存储在内存中,完成后5分钟将被从内存中清除
bhist -a
bhist -l id

lspci

lspci -n 
-n :直接观察 PCI 的 ID 而不是厂商名称

lspci -v
lspci -vv
-v :显示更多的 PCI 接口装置的详细信息
-vv :比 -v 还要更详细的信息

lspci -s 04:00.0 -n
-s :后面接的是每个设备的总线、插槽与相关函数功能

lspci -s 04:00.0 -xxx
-x 查看基本配置空间
-xxx 查看配置空间
-xxxx 查看包括完整的配置空间

修改/tmp文件夹路径

https://blog.csdn.net/bi_hu_man_wu/article/details/61416306

修改TMPDIR并export(默认值看不到,默认值只有TMPPATH)

杂项

# 查看子进程18478对应的父进程号码
# 1号进程,又叫init进程
cd /proc/18478/status | grep PPid
# 刷新top的时间指定
top -d 5
# 修改时间
date -s 06/10/96

# linux的进程状态标记,内置一套软件转换状态机。
man ps,找CODES
# S:interruptible sleep(waiting for an event to complete)
# +:is in the foreground process group
# N:low-priority (nice to other users)
# T:stopped by job control signal

标签:文件,周边,辅助,编程,echo,---------------------------------------------------------------
From: https://www.cnblogs.com/bai2022/p/17778805.html

相关文章

  • Unix/Linux系统编程自学笔记-第三章:Unix/Linux进程管理
    Unix/Linux系统编程自学笔记-第三章:Unix/Linux进程管理1、概念介绍多任务处理计算机技术概念中的多任务处理指的是同时执行若干独立任务。无论是在多处理机系统还是单处理机系统都可以实现多任务处理。对于单处理机系统,多任务处理的实现依靠着多路复用技术,通过上下文的快速......
  • 从零开始的Java编程:教你如何实现“超级马里奥”游戏!
    引言超级马里奥,这个名字对于游戏迷来说一定不陌生。它是一款经典的游戏系列,以一个勇敢的水管工人——马里奥为主角,讲述了他在蘑菇王国中的冒险故事。在这个充满挑战和刺激的游戏中,玩家需要控制马里奥跳跃、躲避障碍物,并与邪恶的蘑菇和食人花敌人战斗,最终抵达城堡的胜利之地。游......
  • 小程序底层技术机制解读 - JavaScript编程语言
    JavaScript是小程序的核心编程语言之一,它在小程序中起着至关重要的作用。本文将深入探讨JavaScript在小程序底层技术机制中的作用,以及如何利用JavaScript来构建小程序应用。同时,我们还将提供一个简单的代码演示,以帮助读者更好地理解JavaScript在小程序中的应用。JavaScript在小程序......
  • 实验2 C语言分支与循环基础应用编程
    1.实验任务1task1源代码1#include<stdio.h>2#include<stdlib.h>3#include<time.h>45#defineN56#defineN13747#defineN246589intmain()10{11intnumber;12inti;1314srand(time(0));//以当前......
  • Mojo——会燃的 AI 编程语言
    点击链接了解详情导语:本文简介Mojo的背景与特点,并分享如何通过腾讯云Cloudstudio的WebIDE和分享社区快速学习和上手Mojo。......
  • 发现一不错的编程助手 Amazon CodeWhisperer
    AmazonCodeWhisperer 是一款AI编程助手,旨在为开发人员提供智能化的编程辅助工具。作为一款基于人工智能的编程助手,CodeWhisperer 的目标是提高开发人员的生产效率、降低开发成本,并提供高质量的编程解决方案。1.安装过程参考官网https://aws.amazon.com/cn/codewhisperer/re......
  • 实验2— C语言分支与循环基础应用编程
    1.实验任务1源代码1#include<stdio.h>2#include<stdlib.h>3#include<time.h>45#defineN56#defineN13747#defineN246589intmain()10{11intnumber;12inti;1314srand(time(0));1516for......
  • 实验2 C语言分支与循环基础应用编程
    摘要一、实验目的二、实验准备三、实验内容四、实验结论 task1源代码:1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#defineN55#defineN13746#defineN246578intmain()9{10intnumber;11inti;12srand(time(0));......
  • 【从零学习python 】02. 开发工具介绍及交互式编程及注释详解
    编写Python代码根据我们之前介绍的知识,我们知道,所谓代码其实就是将一段普通文本按照一定的规范编写,然后交给电脑解析并且执行。那既然是一段文本,那我们是否可以直接使用文本编辑器来编码呢?答案是肯定的,但是这样开发起来,效率会很低。一、常见的代码编辑工具实际上,在我们实际工作......
  • 【从零学习python 】03. Python编程基础:变量、数据类型与标识符
    变量以及数据类型一、变量的定义对于重复使用,并且经常需要修改的数据,可以定义为变量,来提高编程效率。定义变量的语法为:变量名=变量值。(这里的=作用是赋值。)定义变量后可以使用变量名来访问变量值。如下示例:#不使用变量打印三次"今天天气真好",如果需要变成打印"......