首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何dd整行并粘贴插入到没有换行符和空格的其他行?

在云计算领域,有很多工具和技术可以帮助我们实现整行并粘贴插入到没有换行符和空格的其他行。下面是一种常见的方法:

  1. 首先,我们可以使用正则表达式来匹配需要插入的行,并将其保存到一个变量中。
  2. 然后,我们可以使用编程语言中的字符串处理函数,如replace()函数,将保存的行插入到目标行中。
  3. 如果目标行中没有换行符和空格,我们可以使用字符串连接操作符将保存的行与目标行连接起来。
  4. 最后,我们可以使用相应的命令或函数将修改后的目标行写回到文件中。

这种方法可以适用于前端开发、后端开发、软件测试等各种开发场景中。具体的实现方式可能因编程语言和开发环境而异。

举例来说,如果我们使用Python作为开发语言,可以使用以下代码实现整行并粘贴插入到没有换行符和空格的其他行:

代码语言:txt
复制
import re

def insert_line(target_line, insert_line):
    # 使用正则表达式匹配需要插入的行
    pattern = re.compile(r'\b' + target_line + r'\b')
    # 将插入的行与目标行连接起来
    new_line = target_line + insert_line
    # 使用replace()函数将修改后的目标行写回到文件中
    with open('file.txt', 'r+') as file:
        content = file.read()
        modified_content = re.sub(pattern, new_line, content)
        file.seek(0)
        file.write(modified_content)
        file.truncate()

# 调用函数进行测试
insert_line('Hello', ' World!')

在这个例子中,我们使用了Python的re模块来进行正则表达式匹配,然后使用了文件读写操作来修改目标行并写回文件中。

对于腾讯云相关产品和产品介绍链接地址,可以根据具体的需求和场景选择适合的产品。腾讯云提供了丰富的云计算服务,如云服务器、云数据库、云存储等,可以根据具体的需求进行选择和使用。您可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于腾讯云的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

vim编辑器使用教程

二、vim 基本操作 1、编辑 i 进入编辑模式,光标前插入字符 a 进入编辑模式,光标后插入字符 o 进入编辑模式,光标所在行的下一行插入 I 进入编辑模式,光标所在行的行首插入 A 进入编辑模式,光标所在行的行末插入字符...,工作模式不变 d0 删除光标所在位置到行首,工作模式不变 d$ 删除光标所在位置到行末,工作模式不变 一段删除,即删除指定区域 光标选中要删除的首字符,按 v 进入可视模式,再使用 hjkl 移动到要删除的末尾...,按 d 删除 删除整行: dd,删除光标所在行 n+dd ,删除从光标开始的 n 行 2、复制粘贴 yy 复制光标所在行 p 向后粘贴剪切板内容, 如果复制整行, 这里是粘贴在光标所在位置的下一行...P 向前粘贴剪切板内容, 如果是整行, 这里是粘贴在光标所在位置的上一行 这里提一下,dd不是删除,而是剪切,剪切的内容去了剪切板,而不是删掉了 p 和 P 粘贴会出现换行,主要原因是复制整行时,会把行末的换行符也复制下来...其他括号也可以这样 5、查找和替换 1)查找 /+findname 命令模式下查找 按回车键启动查找后, 按 n,会自动找下一个, N 跳到上一个查找光标所在单词 光标在目标单词上时, *或者#查找下一个

6.7K40

100 条 Linux vim 命令备忘单,收藏起来随时备用!

强行写入当前文件并退出 插入命令备忘单 a 在光标后插入 A 在行尾插入 i 在光标前插入 I 在行中的第一个非空白之前插入 gI 在第 1 列中插入 o 在光标下方开始新行并插入 O 在光标上方开始新行并插入...剪切、复制和粘贴命令备忘单 yy复制(猛拉)整行 #yy复制指定行数 dd剪切(删除)整行 #dd剪切指定的行数 p粘贴在光标后 P粘贴在光标前 删除命令备忘单 d删除突出显示的文本 dd删除一行文本...dw删除一个词 D删除从光标所在位置到行尾的所有内容 d0删除从光标所在位置到行首的所有内容 dgg删除从光标所在位置到文件开头的所有内容 dG删除从光标所在位置到文件末尾的所有内容 x删除单个字符...编辑文本命令备忘单 r替换单个字符(并返回命令模式) cc替换整行(删除该行并进入插入模式) C/ c$从光标处替换到行尾 cw从光标处替换到词尾 s删除一个字符(并进入插入模式) J将下面的行合并到当前行...,它们之间有一个空格 gJ将下面的行合并到当前行,它们之间没有空格 u撤消 Ctrl+ r重做 .重复上一个命令 移动命令备忘单 h向左移动光标 j向下移动光标 k向上移动光标 l向右移动光标 b移动到单词的开头

1.5K20
  • vim的使用入门

    vim概述 vim是linu下面常用的文本编辑工具,可以使用 vim -v 来查看有没有安装,如果没有安装可以使用 以下命令安装: sudo apt-get install vim vim...有两种模式,命令模式和插入模式。...在光标所在字符行首插入 o o 在光标下插入 O O 在光标下插入 x x 删除光标所在处字符 hjkl hjkl 移动光标 gg gg 跳转到第一行 G G 到最后一行 nG或:n nG或:n 到第...n行 $ $ 移动到行首 0 0 移动到行尾 ---- 选择、 拷贝、粘贴、剪切 ---- 命令 Demo 相关功能 v v 字符选择 V V 选择一行 ctrl+v ctrl+v 矩形选择 y y...复制选中 yy yy 复制一整行 nyy 2yy 复制前n行 p p 在光标下面粘贴 P P 在光标上面粘贴 d d 剪切选中 dd dd 剪切一整行 x x 剪切一整行 ---- 搜索、替换 ---

    47420

    shell 文本操作命令

    ,光标移动到新行的行首,进入插入状态  O在当前行的上面插入新行,光标移动到新行的行首,进入插入状态  cw删除当前光标到所在单词尾部的字符,并进入插入状态  c$删除当前光标到行尾的字符,并进入插入状态...  dw删除当前字符到单词尾(包括空格)的所有字符  de删除当前字符到单词尾(不包括单词尾部的空格)的所有字符  d$删除当前字符到行尾的所有字符  d^删除当前字符到行首的所有字符  J删除光标所在行行尾的换行符...,相当于合并当前行和下一行的内容   撤消操作  命令功能 u取消最近一次的操作,并恢复操作结果 可以多次使用u命令恢复已进行的多步操作  U取消对当前行进行的所有操作  Ctrl + r对使用u命令撤销的操作进行恢复...  复制与粘贴操作  命令功能 yy复制当前行整行的内容到vi缓冲区  yw复制当前光标到单词尾字符的内容到vi缓冲区  y$复制当前光标到行尾的内容到vi缓冲区  y^复制当前光标到行首的内容到vi缓冲区...p读取vi缓冲区中的内容,并粘贴到光标当前的位置(不覆盖文件已有的内容)  字符串查找操作  命令功能 /word从上而下在文件中查找字符串“word”  ?

    97620

    日常记录(2)vim操作查询手册

    进入可视化模式 按键 功能 Ctrl+v 进入可视化编辑模式 其它 按键 功能 :set expandtab tab展开为空格 cc/S 清除整行,进入插入模式 d$/C 删除光标右边文字/删除光标右边文字进入插入状态...di) 删除括号内的文本 :set undodir=”xxxx” :set undofile 设置持久性撤销和临时保存的文件位置 :ls 显示当前缓冲区文件信息 :e 打开新文件,其他文件放入缓冲区...,进入插入模式 c2w/c2aw 删除光标后的两个单词,进入插入模式 dw/d3e/db/d4l 删除当前光标处经过的字符量,并删除空格 定位切换 按键 功能 Ctrl + o(O) 回到上次编辑的光标位置...]dd 删除从当前行开始的 n 行(准确来讲,是剪切,剪切不粘贴即为删除) [n]yy 复制从当前行开始的 n 行 p 把粘贴板上的内容插入到当前行 dG 删除光标所在行开始到文件尾的所有字符 J 合并两行...1行 :%s/^\(.*\)\n\1$/\1/g 两个重复行压缩为1行 set命令 按键 功能 :set list 显示以“$”表示的换行符和以“^I”表示的制表符等特殊符号 :set nolist

    96920

    linux vim怎么退出编辑模式_shell退出vi编辑器

    O在当前行的上面插入新行,光标移动到新行的行首,进入插入状态 cw删除当前光标到所在单词尾部的字符,并进入插入状态 c$删除当前光标到行尾的字符,并进入插入状态 c^命令删除当前光标之前(不包括光标上的字符...Backspace删除光标左侧的字符 Del删除光标位置的字符 删除操作 命令功能 x删除光标处的单个字符 dd删除光标所在行 dw删除当前字符到单词尾(包括空格)的所有字符 de删除当前字符到单词尾...(不包括单词尾部的空格)的所有字符 d$删除当前字符到行尾的所有字符 d^删除当前字符到行首的所有字符 J删除光标所在行行尾的换行符,相当于合并当前行和下一行的内容 撤消操作 命令功能 u取消最近一次的操作...,并恢复操作结果 可以多次使用u命令恢复已进行的多步操作 U取消对当前行进行的所有操作 Ctrl + r对使用u命令撤销的操作进行恢复 复制与粘贴操作 命令功能 yy复制当前行整行的内容到vi缓冲区 yw...复制当前光标到单词尾字符的内容到vi缓冲区 y$复制当前光标到行尾的内容到vi缓冲区 y^复制当前光标到行首的内容到vi缓冲区 p读取vi缓冲区中的内容,并粘贴到光标当前的位置(不覆盖文件已有的内容)

    14.2K20

    vim的快捷键大全

    X 删除前一个字符 删除3个字符就是3x dd:删除一行 D 删除到行尾 caw:改写单词 c 相当于 d 变为编辑模式 J:删除换行符,使下一行并上来。...,并变为插入模式 O:在当前行上面另起一行,变为插入模式 Ctrl+o:临时变成命令模式(一次而已) :e!...相应的大写状态为不含标点,即只把空格和换行符作为单词间隔符。.... { = 到前一个空行上 } = 到下一个空行上 ###5、VIM的一些插件: c.vim :如果是用root账号的,把文件复制到/usr/share/vim/vim70中解压没有用的,不存在 $...在屏幕中移动: H、M、L分别移动到屏幕的顶部、中间和尾部。 nH、nL 移动到距离屏幕顶部和顶部n行的位置。 Enter:到下一行的第一个字符。 +:到下一行的第一个字符。

    2.1K40

    vim入门

    gg`VG` 选中全部的文本,其中gg为跳到行首,V选中整行,G末尾 y 复制 (默认是复制到"寄存器 p 粘贴 (默认从"寄存器取出内容粘贴) "+y 复制到系统剪贴板(也就是vim的+寄存器) 删除...↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ d 删除 x 删除字符 dd 删除一行 J 删除换行符,两行合并为一行 重做 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ u 撤销 CTRL...+ R 反转撤消 U 一次撤消对一行的全部操作 第二次使用该命令则会撤消前一个U的操作 追加 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ i 在当前光标之前插入文本。...a 在当前光标之后插入文本。 o 在当前行的下面另起一行,并使当前模式转为Insert模式。 O 将在当前行的上面另起一行。...0(数字) 总是把光标移动到当前行的第一个字符上 1$ 将光标移动到当前行行尾 2$ 将光标移动到下一行的行尾 注意 ^ 和 0 不能接受命令计数 ---- 技巧 快速清空文件 gg dG

    34630

    vim命令总结,新手必看!

    插入模式:在正常模式下,按i、a、o等都可以进入插入模式。 可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。总是整行整行的选中。ctrl+v进入可视块模式。...删除光标处的字符 db 删除光标前面的字 dw 删至下一个字的开头 dd 删除整行 :n,md 从第 m 行开始往前删除 n 行...d0: 删除(剪切)当前位置到行首的内容 [n] dd: 删除(剪切)1(n)行。 :m,nd 剪切m行到n行的内容。...:1,10 m 12 剪切1-10行并粘贴到12行里面 d1G或dgg: 剪切光标以上的所有行。 dG: 剪切光标以下的所有行。...daw和das:剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。 d/f:将删除当前位置 到下一个f之间的内容。 粘贴 p: 在光标之后粘贴。

    35220

    linux vim编辑器之常用指令

    2.dd 删除光标所在的那一整行,并将该行复制下来,通常会结合p一起使用,使 用ddp可以将一整行移动到其它的位置。...p来将该文件全部数据复制下来,不过这种 全部复制会删除该文件所有的数据,可以使用u将该文件恢复到原来的样子,再用p 将数据粘贴到其它文件中,后面会写一篇多窗口,多文本编辑的文章,和这些指令 结合起来使用相当的方便...- 一般模式切换到编辑模式 1.i,I 进入到插入模式,i为从目前光标处插入,I为目前所在行第一个非空格字 符处开始插入 2.a,A 进入到插入模式,a为从目前光标所在的下一个字符处开始插入,A为光标...所在行最后一个字符处开始插入 3.o,O 进入到插入模式,o光标目前所在行下一行开辟新的一行开始插入,O光标 目前所在行上一行开辟新的一行开始插入 r,R 进入替换模式,r只会替换光标所在的那个字符一次...:set nu :set nonu 分别表示显示行号和不显示行号 以上这些是vim的一些常用指令,会了这些指令你会发现vim非常好使,这些指令还是有些规律的,复制yy,粘贴p,替换r,删除dd,再和数字相结合就会出现多行操作的效果

    51720

    VIM的使用

    =x dh: 删除当前光标左边的字符=X 行删除 dd: 删除当前光标处的一整行=D 5dd: 删除从光标开始处的5行代码 dgg: 删除从光标到文本开头 dG: 删除从光标到文本结尾 行合并 J:删除一个分行符...,将当前行与下一行合并 文本复制、剪切与粘贴 y: 复制 p:粘贴 yw: 复制一个单词 y2w: 复制2个单词 y$: 复制从当前光标到行结尾的所有单词 y0: 复制从当前光标到行首的所有单词 yy:...复制一整行 2yy: 复制从当前光标所在行开始的2行 复制文本块 首先进入visual模式:v 移动光标选择文本 复制与粘贴的操作 文本修改与替换 cw: 删除从光标处到单词结尾的文本并进入到插入模式...cb: 删除从光标处到单词开头的文本并进入到插入模式 cc: 删除一整行并进入到插入模式 ~: 修改光标下字符的大小写 r: 替换当前光标下的字符 R:进入到替换模式 xp: 交换光标和下一个字符 组合命令...Ctrl+r: 将原来的插销重做一遍 U:恢复一整行原来的面貌(文件打开时的文本状态) q: 若文件没有修改,直接退出 q!

    1.3K10

    学会这21条,你离Vim大神就不远了

    连续替换字母 cc 替换整行(就是删除当前行,并在下一行插入) cw 替换一个单词(就是删除一个单词,就进入插入模式),前提是游标处于单词第一个字母(可用b定位) C (大写C)替换至行尾...ddp 交换光标所在行和其下紧邻的一行。 6. 撤销与重做 u 撤销(Undo) U 撤销对整行的操作 Ctrl + r 重做(Redo),即撤销的撤销。 7....D=d$ d$ 删除当前字符至行尾 d^ 删除当前字符之前至行首 以单词为单位删除 dw 删除当前字符到单词尾 daw 删除当前字符所在单词 以行为单位删除 dd 删除当前行 dj 删除下一行...复制粘贴 普通模式中使用y复制 yy 复制游标所在的整行(3yy表示复制3行) y^ 复制至行首,或y0。不含光标所在处字符。 y$ 复制至行尾。含光标所在处字符。...剪切粘贴 dd 其实就是剪切命令,剪切当前行 ddp 剪切当前行并粘贴,可实现当前行和下一行调换位置 正常模式下按v(逐字)或V(逐行)进入可视模式 然后用jklh命令移动即可选择某些行或字符

    1.7K30

    介绍下vim的基本使用

    i 在光标处插入内容,I 将光标移动到行首插入 o 在下一行插入新行并进入插入模式,O 在上一行插入新行并进入插入模式 a 在光标后面进入插入模式,A 在行尾进入插入模式 可视模式(visual) 可视模式相当于普通编辑器的多选功能...)的开头(beginning) B 跳到当前或上一个单词(空格分隔的单词)的开头 当然,也可以按行为单位跳转: gg 跳转至第一行 G 跳转至最后一行 nG or :n 跳转至第 n 行 ge 跳转至上一个单词尾...,一般用 d 来删除,代表 delete ,删除操作如果配合上面的光标移动使用,可以有很多的组合方法: dd 删除整行 d0 删除到行首 d$ or D 删除到行尾 d^ 删除到行首第一个非空字符 dgg...,我在日常使用中,如果是在插入模式的话我就直接用 Linux 的复制粘贴(就比 Windows 多加一个 shift 键),除此之外我就在可视模式下选住要复制的文本进行一波复制然后在普通模式下进行粘贴,...感觉用惯了的话也还好 y 复制标记内容 yy or Y 复制整行 y$ 复制从当前位置到行尾的内容 p 粘贴到光标后 P 粘贴到光标前 撤回操作 记不记得 Windows 下有个 ctrl + z 可以撤销当前的操作

    1.2K21

    linux之vi,vim命令

    dw 删除这个单词后面的内容 dd 删除光标当前行 dG 删除光标后的全部文字 d$ 删除本行光标后面的内容 d0 删除本行光标前面的内容 y 复制当前行,会复制换行符 yy 复制当前行的内容 yyp...粘贴 ddp 当前行和下一行互换位置 J 合并行 Ctrl+r 重复上一次动作 Ctrl+z 暂停并退出 ZZ 保存离开 xp 交换字符后面的交换到前面 ~ 更换当前光标位置的大小写,并光标移动到本行右一个位置...dG删除光标后的全部文字d$删除本行光标后面的内容d0删除本行光标前面的内容y复制当前行,会复制换行符yy复制当前行的内容yyp复制当前行到下一行,此复制不会放到剪切板中nyy复制当前开始的 n 行p,...P,.粘贴ddp当前行和下一行互换位置J合并行Ctrl+r重复上一次动作Ctrl+z暂停并退出ZZ保存离开xp交换字符后面的交换到前面~更换当前光标位置的大小写,并光标移动到本行右一个位置,直到无法移动...:reg 注意两个特殊的寄存器:* 和 + 这两个寄存器是和系统相通的,前者关联系统选择缓冲区,后者关联系统剪切板 通过它们可以和其他程序进行数据交换 若寄存器列表里无 * 或 + 寄存器,则可能是由于没有安装

    21.7K20

    学会这21条,你离 Vim 大神就不远了!

    连续替换字母 cc 替换整行(就是删除当前行,并在下一行插入) cw 替换一个单词(就是删除一个单词,就进入插入模式),前提是游标处于单词第一个字母(可用b定位) C (大写C)替换至行尾...ddp 交换光标所在行和其下紧邻的一行。 6. 撤销与重做 u 撤销(Undo) U 撤销对整行的操作 Ctrl + r 重做(Redo),即撤销的撤销。 7....D=d$ d$ 删除当前字符至行尾 d^ 删除当前字符之前至行首 以单词为单位删除 dw 删除当前字符到单词尾 daw 删除当前字符所在单词 以行为单位删除 dd 删除当前行 dj 删除下一行...复制粘贴 普通模式中使用y复制 yy 复制游标所在的整行(3yy表示复制3行) y^ 复制至行首,或y0。不含光标所在处字符。 y$ 复制至行尾。含光标所在处字符。...剪切粘贴 dd 其实就是剪切命令,剪切当前行 ddp 剪切当前行并粘贴,可实现当前行和下一行调换位置 正常模式下按v(逐字)或V(逐行)进入可视模式 然后用jklh命令移动即可选择某些行或字符

    1.1K30

    Vim学习笔记上篇

    例如普通模式命令dd删除当前行,但是第一个”d”的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的”j”键就可以删除当前行和下一行。...另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。...用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效地进行文本编辑。 在普通模式中,有很多方法可以进入插入模式。...x 删除游标所在的字符 X 删除游标所在前一个字符 Delete 同x dd 删除整行 dw 删除一个单词(不适用中文) d$或D 删除至行尾 d^ 删除至行首 dG 删除到文档结尾处 d1G 删至文档首部...w 到下一个单词的开头 e 到当前单词的结尾 b 到前一个单词的开头 ge 到前一个单词的结尾 0或^ 到行头 $ 到行尾 f 向后搜索并跳转到第一个匹配的位置(非常实用) F

    62430

    vim 文本编辑器

    扩展【#cc】 h) 【C】删除当前光标到行尾,并切换成插入模式 改变命令 【c】修改后切换成插入模式 命令模式–>插入模式 【c^】删除光标处到行首的字符,并进入插入模式 【...e) 【dd】删除光标所在行 f) 【#dd】多行删除 g) 【D】从当前光标位置一直删除到行尾,留空行,等同于【d】 h) 【...i) 【yw】 j) 【yb】 k) 【#COMMAND】 14) 粘贴命令(p,paste) a) 【p】缓冲区存的如果为整行,则粘贴当前光标所在行的下方...,否则粘贴至当前光标所在处的后面 b) 【P】缓冲区存的如果为整行,则粘贴当前光标所在行的上方,否则粘贴至当前光标所在处的前面 15) 撤销更改 a) 【u】撤销最近的更改.../abc.txt】 表示从光标位置开始向下匹配,第一次匹配到“pat1”的位置到第一次匹配到“pat2”的位置的行末插入abc.txt文件内容 4.2.4.3 查找并替换 【:/PATTERN

    4.3K10

    Linux基本工具——vim

    但是我们发现插入模式下无法用上面的方式退出,这个时候其实要先按esc退出插入模式,到命令模式。 那么如果你到了底行模式不想退出怎么办呢?也同样按esc就能回到命令模式。...(空格除外) 同理,G 和 gg 如果只是想到达某行的第一个位置可以在前面加n。...yy复制一整行内容 n + yy 复制n行内容,包括光标行下面的n-1行 p 粘贴 n + p 多行粘贴,位置是光标行下一行开始 dd删除 n + p 多行删除 ndd + p 多行剪切 + 粘贴...当你执行这个操作时,删除了n个单词之后会进入到插入模式让你去自己更改: 例:c + w 插入模式 插入模式就是输入你要写的东西,但是从命令模式——>插入模式有好几种的进入方式: 命令模式下的光标...强制保存并退出。 搭配vim环境 我们在用vim的时候很不爽,因为没有自动补齐等等一些东西,所以需要让他和VS编译器差不多用起来才舒服。

    6.9K00

    Linux04:(4.6k)vim编辑器「建议收藏」

    ←→选定复制区域,再按yy复制 粘贴 在想要粘贴的地方:p 剪切/删除 剪切/删除光标所在行:dd(下一行补位) 删除/剪切多行:数字dd(下一行补位) 删除/剪切所在行:D(不补位)...复制的命令是y,即yank(抽出) ,常用的命令如下: y 在使用v模式选定了某一块的时候,复制选定块到缓冲区用; yy 复制整行(nyy或者yny ,复制n行,n为数字); y^ 复制当前到行头的内容...; y$ 复制当前到行尾的内容; yw 复制一个word (nyw或者ynw,复制n个word,n为数字); yG 复制至档尾(nyG或者ynG,复制到第n行,例如1yG或者y1G,复制到档尾)...d 剪切选定块到缓冲区; dd 剪切整行 d^ 剪切至行首 d$ 剪切至行尾 dw 剪切一个word dG 剪切至档尾 粘贴的命令式p,即paste(粘贴) p 小写p代表贴至游标后(下...:%s/旧的关键词/新的内容g——替换整个文档中全部符合条件的内容 (注意此命令中没有空格,%表示整个文档,g表示全局global) 临时显示行号——输入:set nu(隐藏行号 set

    1.7K20
    领券